multiprocessing.Queue
複数のプロセスを並行して処理するプログラムを書いています。オーケストレーションの部分を掘り下げるほど、理解できなくなります。
私が達成したいのは、いくつかのプロセスを開始し、先に進む前にそれらすべてが完了していることを確認することです。これは の仕事のようですね.join()
。
最終的に、次のデモ スクリプト (Linux で実行) をテストしました。
import multiprocessing
import time
def myproc():
print("hello from {proc}".format(proc=multiprocessing.current_process()))
time.sleep(5)
allproc = []
for _ in range(3):
p = multiprocessing.Process(target=myproc)
allproc.append(p)
p.start()
print("all processes started")
for p in allproc:
print("joining {proc}".format(proc=p))
p.join()
print("the end")
私が期待したのは、関数が 3 回開始され、すぐに "hello" メッセージが出力されてからスリープすることです。それらすべてがスリープ状態になると、最終メッセージ (「終わり」) が出力されます。
私が実際に得るのはこれです:
hello from <Process(Process-1, started)>
hello from <Process(Process-2, started)>
all processes started
joining <Process(Process-1, started)>
hello from <Process(Process-3, started)>
joining <Process(Process-2, stopped)>
joining <Process(Process-3, stopped)>
the end
スクリプトを実行すると、3 番目の「hello」と 2 番目の「joining」の間で待機します。
上記に従って、期待されるオーケストレーションを実現できるように、マルチプロセッシング コードをどのように設計すればよいですか?