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

如何在Python多线程中按完成顺序依次获取各线程的返回值

Python多线程按任务完成顺序获取返回值实现方案

核心思路:利用线程安全的Queue作为结果中转容器,每个子线程执行完成后主动将返回值写入队列,主线程从队列读取结果时天然遵循先完成先返回的顺序。


修正前代码问题说明

  1. thread.join()方法本身无返回值,原有写法result = thread.join()无法获取到monitor_wrapper的执行结果
  2. 按启动顺序调用join会导致先完成的后序线程结果无法提前返回

具体修改代码

import threading
import queue
import time

# 初始化线程安全的结果队列
result_queue = queue.Queue()

threads = []
for user in users:
    # 包装原任务函数,执行完成后将结果写入队列,无需修改原monitor_wrapper代码
    def wrapped_task(*args):
        res = monitor_wrapper(*args)
        result_queue.put(res)
    
    task = threading.Thread(target=wrapped_task, args=(user[0], user[1]))
    threads.append(task)
    task.start()
    time.sleep(delay / len(users))

# 按完成顺序获取结果,有多少个线程就取多少次
for _ in range(len(threads)):
    # get()会自动阻塞直到有新结果进入队列
    result = result_queue.get()
    print(result)

# 可选:最后统一join所有线程,确保所有资源释放后再执行后续逻辑
for thread in threads:
    thread.join()

原理解释

  • queue.Queue是Python标准库提供的线程安全队列,多线程同时读写不会出现数据混乱
  • 每个子线程任务执行完成后第一时间将结果写入队列,先完成的任务结果先进入队列
  • 主线程循环调用result_queue.get()时,会按结果入队顺序读取,天然匹配任务完成的先后顺序

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:45:02