Многопроцессорность в следующем коде python не работает

Я пытаюсь увеличить время выполнения моей программы python, используя некоторую многопроцессорность. Предположим, у меня есть этот пример кода:

def foo(q,x,y): .... q.put(result) def parallel_funtion(x): q1 = Queue(); q2 = Queue() p1 = Process(target=foo, args=[q1,x,0]) p2 = Process(target=foo, args=[q2,x,1]) p1.start(); p2.start() p1.join(); p2.join() z = max(q1.get(), q2.get()) return z def function(list) ..... for i in list: parallel_function(i) main(): function(aList) 

После первой итерации цикла в «функции» программа зависает именно в этой строке:

 z = max(q1.get(), q2.get()) 

Зачем?

One Solution collect form web for “Многопроцессорность в следующем коде python не работает”

Вопрос короткий по спецификациям, но это работает для меня … Я изменил ваше использование list , поскольку он, похоже, уничтожает метод list python (хотя, как вы говорите, код все еще выполняется):

 from multiprocessing import Process, Queue import time def foo1(queue, procid, arg1, arg2): # Measure execution time and return the total time in the queue print "%s got arg1=%s, arg2=%s " % (procid, arg1, arg2) start = time.time() ii = arg1 while (ii > 0): ii = ii - 1 time.sleep(0.01) # return the output of the call through the Queue queue.put((time.time() - start)*arg2) def parallel_function(x): q1 = Queue() q2 = Queue() p1 = Process(target=foo1, args=[q1, 'Proc1', x, 1]) p2 = Process(target=foo1, args=[q2, 'Proc2', x, 2]) p1.start(); p2.start() p1.join(); p2.join() # Get return values from each Queue z = max(q1.get(), q2.get()) return z def function(_list): for ii in _list: print "FUNCTION RESULT input=%s, result=%s" % (ii, parallel_function(ii)) function([100,120,130,140,150]) 

Вывод:

 Proc1 got arg1=100, arg2=1 Proc2 got arg1=100, arg2=2 FUNCTION RESULT input=100, result=2.01133012772 Proc1 got arg1=120, arg2=1 Proc2 got arg1=120, arg2=2 FUNCTION RESULT input=120, result=2.4130563736 Proc1 got arg1=130, arg2=1 Proc2 got arg1=130, arg2=2 FUNCTION RESULT input=130, result=2.61448001862 Proc1 got arg1=140, arg2=1 Proc2 got arg1=140, arg2=2 FUNCTION RESULT input=140, result=2.81632232666 Proc1 got arg1=150, arg2=1 Proc2 got arg1=150, arg2=2 FUNCTION RESULT input=150, result=3.01693964005 
Python - лучший язык программирования в мире.