with ThreadPoolExecutor() as executor: # 生成器作为可迭代对象 nums1 = (i for i inrange(1, 4)) nums2 = (i for i inrange(10, 13)) results = executor.map(multiply, nums1, nums2) print(list(results)) # 输出 [10, 22, 36]
# 处理结果(按完成顺序,独立捕获异常) for future in futures: try: result = future.result() print(f"结果: {result}") except URLError as e: print(f"下载失败: {e.reason}") except ValueError as e: print(f"计算错误: {e}") except Exception as e: print(f"未知错误: {e}")
特点:
手动控制每个任务的提交
结果处理顺序固定
可以单独处理每个任务的异常
最佳场景:
需要跟踪任务来源的场景
需要逐步处理结果的日志系统
3. as_completed
典型用法:
1 2 3 4 5 6 7
from concurrent.futures import as_completed
futures = [executor.submit(task, param) for param in params]
for future in as_completed(futures): res = future.result() print(f"收到结果: {res}") # 按完成顺序输出
特点:
实时获取已完成任务结果
可以优先处理耗时短的任务
需要额外维护future列表
最佳场景:
文件下载(小文件优先完成)
实时仪表盘更新
需要快速获取部分结果的场景
性能特征对比
模拟耗时任务(3个任务分别需要3s/1s/2s)
1 2 3 4 5 6 7 8
import time from concurrent.futures import ThreadPoolExecutor, as_completed