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

如何使用concurrent.futures.ThreadPoolExecutor保持函数返回值顺序?

按提交顺序获取线程池执行结果的解决方案

直接遍历你已经按顺序保存的futures列表,逐个调用result()方法即可,这样就能严格遵循self.seq里的函数提交顺序来收集结果。

修改后的代码如下:

with concurrent.futures.ThreadPoolExecutor() as executor:
    length = len(self.seq)
    futures = [None] * length
    results = []
    for i in range(length):
        f, args, kwargs = self.seq[i]
        future = executor.submit(f, *args, **kwargs)
        futures[i] = future

    # 直接按提交顺序遍历futures,逐个获取结果
    for future in futures:
        results.append(future.result())

原理说明

  • 你之前的futures列表已经严格按照self.seq的顺序存储了每个任务的Future对象
  • 遍历futures列表并调用result(),会依次等待对应任务完成(如果还没完成的话),然后把结果按顺序加入results
  • 这种方式完全不需要用as_completed(),天然保留原函数列表的提交顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 17:52:31