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

Python asyncio能否在等待响应时继续循环并处理完成的任务?

你的需求可以用asyncio实现

当前代码的问题是你一次性把10个任务全部创建完毕,asyncio会快速跑完所有任务的启动逻辑(也就是print(f'going to sleep: {index}'))——这部分是同步执行的,没有await阻塞,所以所有"going to sleep"会先集中输出;等1秒后所有sleep同时结束,再批量输出"waking up"。

要实现你想要的「启动新任务时,若有已完成的sleep优先处理响应」的效果,得逐个启动任务,同时实时监听并处理已完成的任务,用asyncio.as_completed就能做到,修改后的代码如下:

import asyncio

async def function(index):
    print(f'going to sleep: {index}')
    await asyncio.sleep(1)  # Python注释用#,不是//
    print(f'waking up: {index}')

async def main():
    tasks = []
    # 逐个启动任务,穿插处理已完成的任务
    for i in range(10):
        # 创建并启动单个任务
        task = asyncio.create_task(function(i))
        tasks.append(task)
        # 检查是否有已完成的任务,有就优先处理
        for done_task in asyncio.as_completed(tasks):
            await done_task
            # 处理完一个就跳出循环,继续启动下一个任务
            break

asyncio.run(main())

运行这段代码时,会先启动若干任务,当第一个任务的sleep完成时,会立即输出它的"waking up",之后再继续启动剩下的任务,完全符合你期望的输出模式。

原理是:asyncio.as_completed会实时监听任务列表,一旦有任务完成就立即返回该任务,await它时会执行sleep之后的逻辑(也就是打印"waking up")。每次启动新任务后先检查并处理已完成的任务,避免一次性启动所有任务,从而实现「启动新任务」和「处理完成任务」的穿插执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 09:35:09