Я распараллеливание мой Python 2.7 сценария с помощью модуля многопроцессорной так:Python 2.7: Multiprocessing, очереди и присоединиться
from multiprocessing import Queue, Process
def func(input_queue, result_queue):
my_object = input_queue.get()
# do something
result_queue.put([my_object, 0])
print "finished"
procs = []
chuncks = 4
input_queue = Queue()
result_queue = Queue()
j = len(my_objects)/chuncks
for i in range(chuncks):
input_queue.put(list(my_objects[(i*j):(i+1)*j]]))
for i in range(chuncks):
proc = Process(target=func, args=(input_queue, result_queue))
procs.append(proc)
proc.start()
print proc.pid
for proc in procs:
proc.join()
while not result_queue.empty():
print result_queue.get()
my_object
является экземпляром класса my_class
написанного мной.
Моя проблема: В зависимости от реализации my_class
мой код работает или нет. Если я определяю my_class
просто следующим образом:
class my_class(object):
def __init__(self):
print "bla"
все в порядке. Но «на самом деле», my_class
более сложный (имеет несколько атрибутов). Выполнение приведенного выше кода с реальным осуществлением my_class
приводит к следующему выходу:
1545
1546
1547
1548
finished
finished
finished
finished
Затем он заклинивание во время ожидания proc.join()
. Что я делаю не так?
Что вы желаемый результат? – AndyW
Можете ли вы попытаться дать нам наименьшую возможную программу, которая демонстрирует проблему? –
В этом примере вывод должен быть содержимым «result_queue» (на самом деле моя функция func более сложна, чем в моей публикации здесь: я использую атрибуты my_object для некоторых вычислений и передаю my_object и результат вычисления (вместо 0) - result_queue.) – Christine