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()
关键逻辑说明
任务队列构造:
按批次生成任务,每个批次包含所有国家的第batch_idx*5到batch_idx*5+4个元素,任务队列顺序为:阿根廷0-4、巴西0-4、捷克0-4、丹麦0-4、阿根廷5-9、巴西5-9……以此类推,确保线程不会集中处理单个国家的任务。线程池配置:
使用ThreadPoolExecutor设置max_workers=5,正好匹配你需要的5个线程同时运行的要求,线程池会自动将任务分配给空闲线程执行。线程安全处理:
给print加线程锁是为了避免多线程下输出内容交错,实际API请求如果客户端是线程安全的(比如requests库),可以去掉该锁。
内容的提问来源于stack exchange,提问作者Ruzky
相关产品推荐
相关产品推荐

