Skip to main content
 首页 » 编程设计

python之从 multiprocessing.process for a loop 获取结果

2025年05月04日9虾米姐

这个程序的目标是计算循环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.

不能反驳:)