Z
ZHANK
异步编程

Task 与并发执行

asyncio.create_task/gather、超时控制、取消任务

Task 与并发执行

asyncio.create_task 启动后台任务,gather 并发等待多个——理解 Task 是高效异步的关键。

学完本章你将: 掌握 create_task/gather、超时控制、取消任务。


Task 并发模式

python
import asyncio

async def worker(n):
    await asyncio.sleep(1)
    return f"Worker {n} 完成"

async def main():
    # 创建多个 Task——立即开始执行
    tasks = [asyncio.create_task(worker(i)) for i in range(5)]

    # 等待全部完成
    results = await asyncio.gather(*tasks)
    print(results)
    # ['Worker 0 完成', 'Worker 1 完成', ...]

asyncio.run(main())

超时控制

python
async def slow_operation():
    await asyncio.sleep(10)
    return "太慢了"

async def main():
    try:
        result = await asyncio.wait_for(
            slow_operation(),
            timeout=3.0  # 3 秒超时
        )
    except asyncio.TimeoutError:
        print("操作超时!")

asyncio.run(main())

取消任务

python
async def main():
    task = asyncio.create_task(slow_operation())

    await asyncio.sleep(1)
    task.cancel()  # 取消任务

    try:
        await task
    except asyncio.CancelledError:
        print("任务已被取消")

    # 取消多个
    tasks = [asyncio.create_task(worker(i)) for i in range(3)]
    for t in tasks:
        t.cancel()
    await asyncio.gather(*tasks, return_exceptions=True)