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

asyncio的loop.create_task运行行为疑问:打印次数不符合预期

现象原因

你提交的3个异步任务仅执行完第一次打印就终止,核心原因是主协程没有等待后台任务执行完成就提前退出:

  • 你在run_test中仅通过create_task把3个test协程注册到事件循环,没有添加等待逻辑
  • 三个任务第一次执行print后,遇到await asyncio.sleep(1)会主动让出CPU控制权,此时事件循环切回主协程run_test
  • run_test没有其他后续逻辑,直接执行结束,asyncio.run()会在主协程结束后自动销毁事件循环,未完成的后台任务会被直接终止,因此不会执行剩下的4轮打印逻辑
修复代码

你只需要将创建的任务收集起来,主动等待所有任务执行完成即可,修改后的完整代码如下:

import asyncio
CONNECTIONS = 3
REPEAT = 5

async def test(payload):
    for i in range(REPEAT):
        print(payload)
        await asyncio.sleep(1)

async def run_test():
    tasks = []
    for i in range(CONNECTIONS):
        # 收集所有创建的任务对象
        tasks.append(asyncio.create_task(test(f"Hello World {i}")))
    # 等待所有任务执行完毕,主协程才会结束
    await asyncio.gather(*tasks)

asyncio.run(run_test())

修改后运行代码,就会按预期输出每个字符串各5次,每轮打印间隔1秒。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 16:27:02