2014-02-04 2 views
1

Целью этой программы является вычисление loop_random для цикла num. Я хочу рассчитать 4 случайных разных num/4 с 4 процессорами параллельно и в конце суммирования, чтобы дать u_total. Но проблема в том, что я вижу все 4 процессора в действии, конечный результат вычисляется в 4 раза в том же наборе num/4. Но я хочу рассчитать loop_random для 4 различных случайных массивов. Вот фрагмент части кода, над которым я работаю. ,Получение результатов от multiprocessing.process для цикла

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 

Любые предложения приветствуются. Проблема в том, что это правильный способ многопроцессорности? Очередь каждой очереди вычисляет один и тот же результат и не сохраняется, или каждый процессор вычисляет разные результаты и сохраняется? Большое спасибо за вашу помощь. Пожалуйста, поправьте меня, если что-то не так в том, что я сказал.

+0

Это может помочь, если вы вывесили рабочий пример, есть много синтаксических ошибок, которые мешают ваш образец от запуска – bj0

+0

О, я сожалею. Поскольку это было частью программы, я не смотрел. Сейчас я отредактирую его. Благодарю. – geekygeek

+0

Теперь его рабочий :) Пожалуйста, проверьте – geekygeek

ответ

1

Прошу прощения за ответ, так как это не ответ, однако я не могу оставлять комментарии.

Просто хотелось бы отметить, что с помощью:

from pylab import * 

считается плохой практикой. Не заполняйте кучу случайных вещей. Каждый модуль должен иметь длинный список конкретных вещей, в которых он нуждается.

Согласно Python Zen:

Явное лучше, чем неявное.

Не могу с этим поспорить :)

+0

Изменено! Спасибо :) – geekygeek

+0

сейчас можно прокомментировать, почему бы не удалить это и добавить комментарий? –

+0

@CharlieParker Невозможно удалить принятый ответ. – cpb2

Смежные вопросы