ThreadPoolExecutor生成的Future未按预期实时输出结果问题求助
问题分析与解决
你的代码存在两个关键问题导致不符合预期:
- 先批量提交所有任务,再统一遍历调用
result(),这意味着必须等所有任务执行完毕(4×3=12秒)才会开始打印结果 - 线程池
max_workers=1决定了任务是串行执行的,但原代码的遍历逻辑放大了延迟问题
要实现任务完成一个就立即打印结果的效果,需要使用concurrent.futures.as_completed()函数,它会在每个Future执行完成时立即返回该Future对象。
修改后的代码如下:
from concurrent.futures import ThreadPoolExecutor, as_completed import time def fnc(x, y): time.sleep(3) return x*y with ThreadPoolExecutor(max_workers=1) as executor: futures = [] for i in range(0, 4): print(f"Submitting {i}") futures.append(executor.submit(fnc, i, i+1)) # 实时获取已完成的任务结果 for future in as_completed(futures): print(future.result())
这段代码会按照任务完成的顺序(因为串行执行,就是提交顺序)每隔3秒输出一个结果,完全符合你的预期。
内容的提问来源于stack exchange,提问作者gamerz123123
相关产品推荐
相关产品推荐

