with ThreadPoolExecutor() as executor: futures = [executor.submit(task, param) for param in params_list] for future in futures: # 按提交顺序处理 print(future.result())
特点:
必须等待前一个任务完成才能处理下一个
严格保持任务提交顺序
适合场景:
日志处理需要按时间顺序记录
结果需要顺序写入文件/数据库
2. as_completed
典型代码:
1 2 3 4 5 6
from concurrent.futures import as_completed
with ThreadPoolExecutor() as executor: futures = [executor.submit(task, param) for param in params_list] for future in as_completed(futures): # 按完成顺序处理 print(future.result())
if __name__ == "__main__": times = [3, 1, 2] # 三个任务分别需要3秒、1秒、2秒 with ThreadPoolExecutor() as executor: futures = [executor.submit(task, t) for t in times] print("--- 使用 as_completed ---") start = time.time() for f in as_completed(futures): print(f"{time.time()-start:.1f}s 收到: {f.result()}") print("\n--- 按提交顺序处理 ---") start = time.time() for f in futures: print(f"{time.time()-start:.1f}s 收到: {f.result()}")