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

Python 3多线程优化:按规则实现5线程批量处理嵌套序列

多线程轮询批次处理国家序列的实现方案

要实现按批次轮询处理每个国家的序列(每批为每个国家的5个元素),避免先处理完单个国家所有序列的问题,核心是先构造符合规则的任务队列,再用固定大小的线程池并行执行任务。以下是具体实现:

完整代码实现

import concurrent.futures
import threading

# 原有的国家与序列定义
countries = ['argentina', 'brazil', 'czech', 'denmark']
countries_seq = {country: [f'{country}{n}' for n in range(1000)] for country in countries}

# 线程锁:解决多线程下print输出混乱问题(API请求无需此锁,除非客户端非线程安全)
print_lock = threading.Lock()

def submit_country(country_name: str, country_seq: str):
    # 替换为实际API请求逻辑
    with print_lock:
        print(f'{country_name} - {country_seq}')

def main():
    batch_size = 5  # 每个批次处理单个国家的5个元素
    # 计算总批次数(每个国家共1000个元素,1000//5=200批)
    total_batches = len(countries_seq[countries[0]]) // batch_size

    # 构造任务队列:按批次轮询所有国家的对应段
    tasks = []
    for batch_idx in range(total_batches):
        start = batch_idx * batch_size
        end = start + batch_size
        # 遍历每个国家,取当前批次的5个元素加入任务队列
        for country in countries:
            for seq in countries_seq[country][start:end]:
                tasks.append((country, seq))

    # 创建5个线程的线程池,并行执行任务
    with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
        executor.map(lambda args: submit_country(*args), tasks)

if __name__ == '__main__':
    main()

关键逻辑说明

  1. 任务队列构造:
    按批次生成任务,每个批次包含所有国家的第batch_idx*5到batch_idx*5+4个元素,任务队列顺序为:阿根廷0-4、巴西0-4、捷克0-4、丹麦0-4、阿根廷5-9、巴西5-9……以此类推,确保线程不会集中处理单个国家的任务。

  2. 线程池配置:
    使用ThreadPoolExecutor设置max_workers=5,正好匹配你需要的5个线程同时运行的要求,线程池会自动将任务分配给空闲线程执行。

  3. 线程安全处理:
    给print加线程锁是为了避免多线程下输出内容交错,实际API请求如果客户端是线程安全的(比如requests库),可以去掉该锁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 02:05:18