多くのPythonユーザーとは逆の問題があります。 I already got helpをマルチプロセッシングに切り替えて私の仕事用コンピュータのコアを4つすべて利用しています。その結果、実際のパフォーマンスの向上が見られました。しかし、その改善はやや信頼性がありません。私のプログラムのCPU使用率は、たとえ6つのプロセスが稼動していても、稼働し続けると悪化するようです。いくつかのデバッグメッセージを追加した後、これは私が生成していたプロセスのいくつか(完了まで実行されるはずです)が時期尚早に死んでいたことが原因であることがわかりました。プロセスの実行方法の本体は、whileループ真で、かつ唯一の方法はアウト、このブロックである:Python - 非空のマルチプロセッシングからQueue.Empty例外を取得します.Queue
try:
f = filequeue.get(False)
except Empty:
print "Done"
return
filequeueがサブプロセスの作成前に移入され、それは間違いなく、実際に空ではありません。すべてのプロセスは、実際に空になったらほぼ同時に終了する必要があります。 Queue.get呼び出しに0以外のタイムアウト(0.05)パラメータを追加しようとしましたが、これで問題は解決されませんでした。空でないキューからQueue.empty例外が発生するのはなぜですか?
これは 'multiprocessing.Queue'か' Queue.Queue'ですか? – NPE
'filequeue.get(False)'の代わりに 'filequeue.get(True)'を実行するとどうなりますか? – NPE
マルチプロセッシングを使用しているので、それはマルチプロセッシングです。私がfilequeue.get(True)を実行した場合、もちろんQueue.Empty例外は発生しませんが、一度ファイルキューが空になるとすべてのprocessessは永遠にブロックされるため、メインプロセスが生成されたプロセスに参加しようとするとすべてが停止します。 – dpitch40