原文地址
学习来源
分类目录——多进程
对于在当前主进程的操作,函数的返回值可以直接操作,或者用一个参量进行接收。但是在其他进程中运行的函数的返回值,是无法直接传递到主进程的。将其返回值存到一个全局性的存储器中,是一种可行的方案。这里用queue(队列)来存储多个进程的返回值。在主进程中可以将他们依次取出,这样就做到了多进程与主进程的返回值传递。关于队列,我在我的这篇博客中做了简单说明,该博客也是多线程中返回值传递的介绍。
实例演示
import multiprocessing as mp # 多进程的模块
def job(q): # 进程调用测程序,传递的参数为一个queue(队列)对象
res = 0
for i in range(1000):
res += i**2
q.put(res) # 把结果(就是主进程中函数的返回值)存入队列
if __name__ == '__main__':
q = mp.Queue()
p1 = mp.Process(target=job, args=(q,))
# 生成进程,并传入要执行的操作(函数),args=参数列表,只传一个参数的时候注意要在参数后面加一个逗号,因为args需要一个可迭代的参量
p2 = mp.Process(target=job, args=(q,))
p1.start() # 进程操作开始执行
p2.start()
p1.join() # 将进程操作设定为关键路径
p2.join()
# p1,p2都进行join()操作,p1,p2执行完之后(p1,p2都进行了job并把结果存入了q)才进行下面的操作
res1 = q.get() # 从结果队列中取值
res2 = q.get()
print(res1+res2)