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

Python ThreadPoolExecutor执行时每完成10个任务自动加延迟的实现方法

解决方案

以下两种实现方式都不需要修改parse任务函数的代码,即可实现每完成10个任务自动休眠指定时长的需求:


方案1:分批提交任务(推荐,适配你设置的max_workers=10参数)

将总任务列表按每10个拆分为一个批次,每跑完一个批次就休眠指定时长,逻辑简单可控:

import time
from concurrent.futures import ThreadPoolExecutor

user_list = [i for i in range(1, 101)]
X = 3 # 自定义休眠的秒数

def parse(user):
    return str(user) + "parsed!"

# 按每10个元素拆分列表为批次
user_chunks = [user_list[i:i+10] for i in range(0, len(user_list), 10)]
output = []

start = time.time()
with ThreadPoolExecutor(max_workers=10) as exe:
    for idx, chunk in enumerate(user_chunks):
        # 执行当前批次的10个任务
        chunk_result = exe.map(parse, chunk)
        output.extend(list(chunk_result))
        # 非最后一批的情况下执行休眠,如果需要最后10个跑完也休眠,可删除if判断
        if idx != len(user_chunks) - 1:
            time.sleep(X)

end = time.time()
print('taken time', end-start)

该方案刚好匹配你设置的10个并发线程数,每批次10个任务并行跑完后才会触发休眠,完全符合需求。


方案2:完成量计数触发休眠(无需拆分列表)

利用ThreadPoolExecutor.map返回结果的迭代特性,每获取到1个完成的任务结果就计数,累计到10的倍数时触发休眠:

import time
from concurrent.futures import ThreadPoolExecutor

user_list = [i for i in range(1, 101)]
X = 3 # 自定义休眠的秒数

def parse(user):
    return str(user) + "parsed!"

output = []
count = 0

start = time.time()
with ThreadPoolExecutor(max_workers=10) as exe:
    result = exe.map(parse, user_list)
    for res in result:
        output.append(res)
        count += 1
        if count % 10 == 0:
            time.sleep(X)

end = time.time()
print('taken time', end-start)

该方案不需要拆分任务列表,适合任务执行耗时差异小的场景,休眠逻辑会严格按照每完成10个任务触发。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:45:01