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
相关产品推荐
相关产品推荐

