You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python asyncio中实现指定任务的阻塞控制?

如何让异步任务A、B并行执行后再启动同步任务C?

你的原代码里,await A()之后再await B()是串行执行的——A执行完才会启动B,这不符合“A与B互不阻塞”的要求。要实现A、B并行,且C必须等两者都完成后再执行,可以用以下两种方式:

方法一:使用asyncio.gather()

asyncio.gather()可以批量运行多个异步任务,并等待所有任务完成后再继续执行后续代码,是实现并发等待最简洁的方式。

import asyncio

async def A():
    print("A 开始执行")
    await asyncio.sleep(2)  # 模拟异步耗时操作
    print("A 执行完成")

async def B():
    print("B 开始执行")
    await asyncio.sleep(1)  # 模拟异步耗时操作
    print("B 执行完成")

def C():
    print("C 开始执行")

async def handler():
    # 让A和B并行执行,等待两者全部完成
    await asyncio.gather(A(), B())
    # 此时A、B均已完成,启动C
    C()

asyncio.run(handler())

运行后你会看到A和B几乎同时启动,等两者都结束后才会执行C,完全满足需求。

方法二:使用asyncio.create_task()手动创建并发任务

如果需要更灵活地控制异步任务(比如中途取消任务),可以手动创建任务对象,再等待它们完成:

import asyncio

async def A():
    print("A 开始执行")
    await asyncio.sleep(2)
    print("A 执行完成")

async def B():
    print("B 开始执行")
    await asyncio.sleep(1)
    print("B 执行完成")

def C():
    print("C 开始执行")

async def handler():
    # 创建任务并立即加入事件循环,A和B会同时开始执行
    task_a = asyncio.create_task(A())
    task_b = asyncio.create_task(B())
    
    # 等待两个任务全部完成
    await task_a
    await task_b
    
    # 启动C
    C()

asyncio.run(handler())

关键说明

不管用哪种方式,核心逻辑都是先让A和B并发运行,再等待两者全部结束后调用C。因为C是同步函数,只要在await所有异步任务之后调用,就天然保证了C只会在A、B完成后启动——不需要额外的依赖或同步机制,完全符合你“C不依赖A、B输出”的前提。

内容的提问来源于stack exchange,提问作者jbuddy_13

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 10:55:19