Python 2.7:多处理,队列和连接

时间:2016-12-14 13:10:57

标签: python join queue multiprocessing

我使用多处理模块并行化我的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()时卡住了。我做错了什么?

1 个答案:

答案 0 :(得分:0)

尝试使用不同的队列

m = multiprocessing.Manager()
queue1 = m.Queue()