2016-12-14 12 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は私の投稿より複雑です。 result_queueへの計算(0ではなく)。) – Christine

答えて

0

は異なるキュー

m = multiprocessing.Manager() 
queue1 = m.Queue() 
関連する問題