プロジェクトでマルチプロセッシングを使用しています。結果をキューに入れるワーカー関数があります。すべて正常に動作します。しかし、x のサイズが大きくなると (私の場合、x は配列です)、何かがおかしくなりました。これが私のコードの簡略版です:
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
私はいくつかのテストを行います。実際、結果をキューに入れないと問題が発生するように見えますが、結果を入れないとすべてが機能しますが、目的はありません。