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

如何用asyncio按每10个一组执行任务并等待每组完成?

实现按组异步执行任务

首先修正原代码中任务列表的错误:原代码里my_tasks.append(lambda: my_task)并没有正确创建可执行的任务逻辑,只是保存了一个返回函数的lambda,我们需要直接基于任务参数来分组处理。

完整实现代码

import asyncio

async def my_task(x):
    await asyncio.sleep(0.1)
    print(f"done: {x}")

async def main():
    # 按每10个任务为一组,循环处理所有任务
    for i in range(0, 1000, 10):
        # 取出当前组的任务参数范围,处理最后一组可能不足10个的情况
        group_args = range(i, min(i + 10, 1000))
        # 创建当前组的所有协程任务
        group_tasks = [my_task(x) for x in group_args]
        # 等待当前组所有任务完成后,再执行下一组
        await asyncio.gather(*group_tasks)

if __name__ == "__main__":
    asyncio.run(main())

关键逻辑说明

  • 分组处理:通过range(0, 1000, 10)生成每组的起始索引,每次步进10,确保每组最多包含10个任务;用min(i+10, 1000)避免最后一组超出总任务数。
  • 并行执行组内任务:针对每组参数生成对应的协程对象,用asyncio.gather并行执行组内所有任务,保证同一组的任务异步运行。
  • 组间串行等待:每次循环都等待当前组的gather完成后再进入下一轮循环,严格实现“一组完成再执行下一组”的要求。

原代码问题修正

原代码中my_tasks.append(lambda: my_task的写法无效:lambda仅返回my_task函数本身,既没有传入必要的参数x,也没有生成可执行的协程对象。上述实现直接基于任务参数分组,从根源上解决了这个问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 00:32:05