3

私は次のメソッドを使用して、Python で並列子プロセスを実装しています。

pool = multiprocessing.Pool(processes=4)
pool.map_async(my_parallel_func ....)
pool.close()
pool.join()

これらのタスクは数分間実行されます。pool.join()そして、このブロッキング待機中にCtrl+を押しcてメイン スクリプトをキャンセルできないことに気付きました。Ctrl+を押すと、スタック プリントがc表示されます。プログラムは停止しませんが、ゾンビ プロセスになります。各サブプロセスを手動で強制終了する必要があります。

Ctrlプログラムを+cで終了させ、すべての子プロセスを同時に終了させるにはどうすればよいですか?

4

1 に答える 1

-1

問題は、Ctrl+cが非同期マップを実行しているプールから 1 つのプロセスのみを強制終了することです。強制終了されるとすぐに、マネージャーは新しいプロセスを使用してタスクを再生成します。どうにかする必要があるのexcept KeyboardInterrupt:は、 のトップ レベルに を配置my_parallel_funcすることです。これにより、メイン プロセスに何らかの特別な値を設定することで、プロセス ツリー全体を停止する必要があることを伝えることができます。

于 2013-08-19T15:52:37.357 に答える