私のプロジェクトではマルチプロセッシングを使用しています。私は結果を待ち行列に入れるワーカー関数を持っています。すべてうまく動作します。しかし、xの大きさが増えるにつれて(私の場合xは配列です)何かが間違っています。pythonでのマルチプロセッシングがブロックされています
def do_work(queue, x):
result = heavy_computation_function(x)
queue.put(result) # PROBLEM HERE
def parallel_something():
queue = Queue()
procs = [Process(target=do_work, args=i) for i in xrange(20)]
for p in procs: p.start()
for p in procs: p.join()
results = []
while not queue.empty():
results.append(queue.get)
return results
私はPythonのプロセスが動作したが、その後何かが起こると、すべてのプロセスが実行されているが、何もしないされている監視システムで参照してください。ここに私のコードの簡易版です。これは、ctrl-Dとタイプするときに得られるものです。
pid, sts = os.waitpid(self.pid, flag)
KeyboardInterrupt
私はいくつかのテストを行います。問題は、実際にはキューに結果を入れることに似ているように見えますが、結果をすべて入れても、目的がない場合は、
キューオブジェクトを新しいプロセスに渡すことは決してありません。 'Process'の' args'も 'タプル'でなければなりません。 'args =(queue、i)'に変更してみてください。あなたの 'queue.get'は' queue.get() 'になるようにいくつかの括弧を必要とします。 – Wessie