2016-12-14 203 views
0

我通过多模块这样的并行我的Python脚本2.7:的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 

然后,stucks等待proc.join()。我究竟做错了什么?

+0

什么是你想要的输出? – AndyW

+0

您可以尝试给我们最小的程序来证明问题吗? –

+0

在这个例子中,输出应该是'result_queue'的内容( - 实际上,我的函数'func'比我在这里的发布更复杂:我使用my_object的属性进行一些计算,并传递my_object和计算结果(而不是0)给result_queue。) – Christine

回答

0

尝试使用不同的队列

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