[英]Getting results from multiprocessing.process for a loop
该程序的目标是计算循环num
的loop_random
。 我想用4个处理器并行计算4个随机不同的num/4
,最后求和得出u_total
。 但是问题是尽管我看到所有4个处理器都在工作,但最终结果是为相同的num/4
集计算4倍的。 但是我想为4个不同的随机数组计算loop_random
。 这是我正在处理的部分代码的片段。 。
from numpy import *
import multiprocessing as mp
from multiprocessing import Process, Queue
num = 5000
def loop_random(num, out):
n = 1
total = zeros(((100.,100.,100.)), dtype='float')
while n<= num:
x, y , z = random.rand(100), random.rand(100), random.rand(100) #some random numbers
result = x**2 + y**2 + z**2
total = total + result
n += 1
out.put(total)
if __name__=='__main__':
q1 = mp.Queue()
q2 = mp.Queue()
q3 = mp.Queue()
q4 = mp.Queue()
p1 = mp.Process(target = loop_random, args=(num/4, q1))
p2 = mp.Process(target = loop_random, args=(num/4, q2))
p3 = mp.Process(target = loop_random, args=(num/4, q3))
p4 = mp.Process(target = loop_random, args=(num/4, q4))
p1.start()
p2.start()
p3.start()
p4.start()
u_total_proc1 = q1.get()
u_total_proc2 = q2.get()
u_total_proc3 = q3.get()
u_total_proc4 = q4.get()
p1.join()
p2.join()
p3.join()
p4.join()
u_total = u_total_proc1 + u_total_proc2 + u_total_proc3 + u_total_proc4
print u_total
欢迎任何建议。 问题更多在于这是正确的多处理方式吗? 是每个队列计算出相同的结果并没有存储,还是每个处理器计算出不同的结果并存储? 非常感谢你的帮助。 如果我所说的话有误,请纠正我。
很抱歉张贴此答案,因为它不是答案,但是我还不能发表评论。
只是要注意使用:
from pylab import *
被认为是坏习惯。 不要毯子导入一堆随机的东西。 每个模块都应详细列出其所需的具体内容。
根据Python Zen:
显式胜于隐式。
不能与之争论:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.