通过 asyncio.create_task()
将一个协程(coroutine)包装成一个 Task 对象,并立即将其加入事件循环的任务队列中,从而实现异步并发执行。
create_task()
用于一次性并发任务(如HTTP请求、数据库查询等)
create_task()
必须在事件循环运行时调用(例如在 async 函数中)。
create_task()
会将协程提交到事件循环中,无需等待它完成,后续代码可以继续执行。适合需要“后台运行”任务的场景(如同时处理多个网络请求)。
import asyncio
async def my_coroutine():
print("Coroutine started")
await asyncio.sleep(1)
print("Coroutine finished")
async def main():
# 将协程包装成 Task 并调度执行
task = asyncio.create_task(my_coroutine())
print("Task created")
await task # 等待任务完成(可选)
asyncio.run(main())
返回的 Task 对象可用于等待任务完成(await task)或取消任务(task.cancel())。 如果未显式 await 任务,主协程可能在任务完成前退出 可以通过 task.cancel() 取消任务,但需要处理 CancelledError:
通过 asyncio.gather()
asyncio.gather() 用于并发运行多个协程并等待它们全部完成
# 使用 gather 并发多个协程
await asyncio.gather(my_coroutine(), my_coroutine())