Pythonで子プロセスを入れようとしたときにこの現象が見られました。ここで親プログラムparent_process.py
次のとおりです。子プロセス内に子プロセスを作成し、Python多重処理が失敗した場合
import multiprocessing
import child_process
pool = multiprocessing.Pool(processes=4)
for i in range(4):
pool.apply_async(child_process.run,())
pool.close()
pool.join()
親プログラムは、次の子プログラムchild_process.pyで「実行」関数を呼び出します。私は親プログラムを実行すると
import multiprocessing
def run():
pool = multiprocessing.Pool(processes=4)
print 'TEST!'
pool.close()
pool.join()
、何もプリントアウトされませんでしたプログラムはすぐに終了しました。ただし、print 'TEST!'
を1行上に移動すると(ネストされた子プロセスが作成される前に)、'TEST!'
が4回印刷されます。
子プロセスのエラーが画面に表示されないため、子プロセスが独自のネストされた子プロセスを作成すると、プログラムがクラッシュすることがわかります。
シーンの後ろで何が起こるか説明できますか?ありがとう!
ネスティングには制限があり、Exceptイオンですが、この場合は遠く離れています。私は他のどこかの問題を、おそらく 'プール'メカニズムだと思う... – CoMartel
これで改善しようとしているのは何ですか?より大きい 'Pool'を起動するよりも' Pool'のプールを起動する方が速くはありません – CoMartel
@HarryPotfleur各子プロセスが独自のプロセスを管理できるようにするため、プログラムは論理的に見た目が綺麗に見えます。 16個のコアがあるとしたら、4x4ネストされたプロセスを同時に実行できます。私は以下の回避策を提供します。 –