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

Python多线程场景下为每次循环迭代添加延迟的最优方案是什么

问题答疑

直接在循环前添加sleep是否可行?

不可行。executor.map调用后会立刻按配置的max_workers=5并发度批量提交所有上传任务,等代码执行到遍历results的循环位置时,所有请求早就已经发送完成,此时无论是在循环前还是循环内加sleep,都无法限制请求发送频率,刚提交的前5个请求就会直接触发限流规则。

最优实现方式

推荐按批次提交任务,严格匹配每分钟最多5次的限流规则,具体逻辑为:将待上传数据按每5条分为1个批次,每批次提交5个上传任务,等待该批次全部执行完成后,休眠1分钟再提交下一批次,既不会触发限流,也能最大化利用限流配额。
示例代码如下:

import concurrent.futures
import time
import math

upload_tasks = df.to_dict('records')
batch_size = 5  # 匹配每分钟最多5次的限流阈值
sleep_interval = 60
t = []

# 计算总批次数量
total_batch = math.ceil(len(upload_tasks) / batch_size)

for batch_idx in range(total_batch):
    # 切分当前批次的待上传数据
    current_batch = upload_tasks[batch_idx * batch_size : (batch_idx + 1) * batch_size]
    
    # 提交当前批次的任务
    with concurrent.futures.ThreadPoolExecutor(max_workers=batch_size) as executor:
        for result in executor.map(upload, current_batch):
            t.append(result)
    
    # 最后一个批次执行完成后无需额外等待
    if batch_idx < total_batch - 1:
        time.sleep(sleep_interval)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 11:09:01