【发布时间】:2014-02-04 16:50:07
【问题描述】:
这个程序的目标是为循环 num 计算 loop_random。我想用 4 个并行处理器计算 4 个随机不同的 num/4,最后求和得到 u_total。但问题是,虽然我看到所有 4 个处理器都在运行,但最终结果计算为同一组 num/4 的 4 倍。但我想为 4 个不同的随机数组计算 loop_random。
这是我正在处理的部分代码的 sn-p。 .
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
欢迎提出任何建议。问题更多是关于这是多处理的正确方法吗?每个队列是否计算相同的结果而不存储,或者每个处理器计算不同的结果并存储?非常感谢你的帮助。如果我说的有问题,请纠正我。
【问题讨论】:
-
如果您发布一个工作示例可能会有所帮助,有很多语法错误会阻止您的示例运行
-
哦,对不起。由于它是程序的一部分,我没有看。我现在将编辑它。谢谢。
-
现在它的工作:) 请检查
-
您能否提供更多关于您预期的 u_total 的解释或原始值?根据您的描述,听起来您期望 (loop_random(x/4) * 4) = loop_random(x),这不会与 total 每次都初始化为零。
-
谢谢。是的,我期待
(loop_random(x/4) * 4) = loop_random(x)。所以你认为它正在发生是因为我将总数初始化为零?我将在循环外初始化总并尝试。
标签: python process parallel-processing multiprocessing