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

Asyncio按API请求限制分组执行任务时sleep等待不生效问题

问题排查与修复方案

问题根因

  • asyncio.gather() 未添加 await 关键字:程序不会等待当前批次的异步任务执行完成,就会直接执行后续的休眠逻辑,任务执行和休眠的时序完全不符合预期。
  • 误用同步休眠方法:time.sleep() 是同步阻塞方法,在异步运行环境中会卡住整个事件循环,既无法让出CPU给异步任务执行,也不能实现任务执行完成后再等待间隔的需求,需替换为异步休眠方法 asyncio.sleep()。
  • 批次切片逻辑错误:i + 1 * 50 受运算符优先级影响,实际计算结果为 i + 50,并非你预期的 (i+1)*50,同时末尾批次的切片规则错误,会导致最后一批任务丢失元素。

修复后代码

import asyncio
nb_tasks = len(tasks)
nb_page = (nb_tasks // 50) + 1

for i in range(nb_page):
    # 修正切片逻辑,自动适配最后不足50的批次
    start = i * 50
    end = start + 50
    tasks_to_play = tasks[start:end]
    if not tasks_to_play:
        break
    
    print("TIME : " + str(config.time_to_reset))
    # 等待当前批次所有异步任务执行完成
    await asyncio.gather(*tasks_to_play)
    # 异步等待指定间隔,不阻塞事件循环
    await asyncio.sleep(config.time_to_reset)

注意:上述代码需要放在用 async def 定义的异步函数中运行,如果是入口逻辑可以用 asyncio.run(你的异步函数()) 触发执行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:48:02