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

Python多线程:如何获取最先完成线程的返回结果?

最简实现方法

直接用concurrent.futures.ThreadPoolExecutor搭配wait方法指定return_when=FIRST_COMPLETED,就能快速拿到第一个完成的线程结果,忽略未完成的任务,总耗时由最快的线程决定(示例中为1秒)。

示例代码

import concurrent.futures
import time

def task1():
    time.sleep(1)
    return 1

def task2():
    time.sleep(5)
    return 2

if __name__ == "__main__":
    with concurrent.futures.ThreadPoolExecutor(max_workers=2) as executor:
        # 提交两个任务
        future1 = executor.submit(task1)
        future2 = executor.submit(task2)
        
        # 等待第一个完成的任务
        done, not_done = concurrent.futures.wait(
            [future1, future2], 
            return_when=concurrent.futures.FIRST_COMPLETED
        )
        
        # 输出第一个完成任务的结果
        for future in done:
            print(future.result())  # 输出1

方案优势

  • 无需手动管理threading.Event或复杂的join条件判断,concurrent.futures已封装好核心逻辑
  • 上下文管理器会自动处理未完成线程的资源回收
  • 代码简洁直观,完全匹配你要的最简需求

原生threading模块替代方案

如果坚持用原生threading,可以借助队列实现:

import threading
import time
import queue

def task(q, delay, result):
    time.sleep(delay)
    q.put(result)

if __name__ == "__main__":
    q = queue.Queue(maxsize=1)
    
    # 启动线程
    t1 = threading.Thread(target=task, args=(q, 1, 1))
    t2 = threading.Thread(target=task, args=(q, 5, 2))
    t1.start()
    t2.start()
    
    # 阻塞获取第一个结果
    result = q.get()
    print(result)  # 输出1
    
    # 若需终止未完成线程,可自定义退出标记让任务自行结束,原生线程无法强制终止

内容的提问来源于stack exchange,提问作者Ned Hulton

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 20:27:03