我使用多处理模块并行化我的Python 2.7脚本,如下所示:
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()
时卡住了。我做错了什么?
答案 0 :(得分:0)
尝试使用不同的队列
m = multiprocessing.Manager()
queue1 = m.Queue()