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

Python如何从multiprocessing多进程中获取所有函数的返回值

问题原因
  • 缩进错误:原代码中result = qout.get()写在了if __name__ == '__main__'代码块外部,qout仅在主进程的代码块内定义,全局作用域无法访问该变量,实际运行会直接抛出未定义错误。
  • 队列取值次数不足:multiprocessing.Queue的get()方法单次仅能取出一个最早入队的元素,你的两个进程一共向队列中写入了两个返回值,仅调用一次get()自然只能拿到第一个结果。
修改方案

直接调整代码缩进,并且调用两次get()获取全部返回值即可,同时建议将队列作为参数传入进程函数,避免全局变量带来的跨平台兼容问题,修改后代码如下:

import multiprocessing
def gm(name, qout):
    h = "Good Morning " + str(name)
    qout.put(h)
def sal(name, qout):
    k = "Hi " + str(name)
    qout.put(k)
if __name__ == '__main__':
    qout = multiprocessing.Queue()
    p1 = multiprocessing.Process(target=gm, args=("ashin", qout))
    p2 = multiprocessing.Process(target=sal, args=("ashin", qout))
    p1.start()
    p2.start()
    p1.join()
    p2.join()
    # 依次取出两个返回值
    res1 = qout.get()
    res2 = qout.get()
    print(res1, res2)

如果后续进程数量不固定,也可以用循环批量取出队列中所有内容:

# 放在所有进程join()之后执行即可
results = []
while not qout.empty():
    results.append(qout.get())
print(results)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 21:36:03