这个程序的目标是计算循环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
欢迎提出任何建议。问题更多的是这是多处理的正确方法吗?每个 Queue 是否计算相同的结果而不存储,或者每个处理器计算不同的结果并存储?非常感谢你的帮助。如果我说的不对,请指正。
请您参考如下方法:
很抱歉发布这个答案,因为它不是一个答案,但是我还不能发表评论。
只是想注意使用:
from pylab import *
被认为是不好的做法。不要一揽子进口一堆随机的东西。每个模块都应该有一个较长的列表,列出它需要的特定内容。
根据 Python 禅宗:
Explicit is better than implicit.
不能反驳:)
