Task是asyncio中对协程的封装,用于并发调度和管理。通过asyncio.create_task()创建后自动运行,支持状态查询、结果获取、取消操作及回调绑定,并可结合gather()实现多任务并发执行。

在 Python 中,Task 是对协程的封装,用于实现并发执行。它由 asyncio 库提供,允许你将一个协程调度到事件循环中运行,并对其进行管理,比如追踪执行状态、取消任务等。
Task 的作用与创建方式
Task 包装一个协程,使其自动加入事件循环,在后台运行。相比直接 await 协程,Task 可以并发启动多个任务而不阻塞。
使用 asyncio.create_task() 来创建 Task:
- 该函数接收一个协程对象并返回一个 Task 实例
- Task 一旦创建,就会被自动调度执行
- 适合在主函数中并发启动多个异步操作
立即学习“Python免费学习笔记(深入)”;
import asyncioasync def say_hello(delay, msg): await asyncio.sleep(delay) print(msg)
async def main():
创建两个任务,并发执行
task1 = asyncio.create_task(say_hello(1, "Hello")) task2 = asyncio.create_task(say_hello(2, "World")) # 等待任务完成 await task1 await task2asyncio.run(main())
Task 的状态与控制
Task 提供了多种方法来检查和控制协程的执行过程。
-
task.done():判断任务是否已完成 -
task.result():获取任务返回值(需任务已完成) -
task.cancel():主动取消任务 -
task.add_done_callback(callback):任务完成后调用回调函数
立即学习“Python免费学习笔记(深入)”;
async def slow_task():
await asyncio.sleep(2)
return "完成"
async def main():
task = asyncio.create_task(slow_task())
# 可以检查状态
print("任务完成了吗?", task.done()) # False
result = await task
print("结果:", result)
print("任务完成了吗?", task.done()) # True
并发等待多个 Task
可以使用 asyncio.gather() 或 asyncio.wait() 同时处理多个 Task。
-
gather()更常用,能按顺序返回结果 -
wait()返回完成和未完成的任务集合
立即学习“Python免费学习笔记(深入)”;
async def main():
tasks = [
asyncio.create_task(say_hello(1, "A")),
asyncio.create_task(say_hello(2, "B")),
]
await asyncio.gather(*tasks)
基本上就这些。Task 让协程不只是“可等待对象”,而是可调度、可管理的执行单元,是构建高效异步程序的核心工具。











