いくつかのコールバック関数があり、複数のプロセスとして起動し、親プロセスからのシグナルを介してすべてを終了させたいと考えています。
これを行う私の現在の方法は、共有 c_bool を作成してmultiprocessing.Value
に設定しTrue
、作成時にすべてのプロセスに配布することです。私のプロセスはすべて、次のように共有ブールを使用して while ループを実行します。
while myC_bool: ...keep running...
次に、bool を親プロセスから切り替えるだけでFalse
、すべての子プロセスが最終ループを完了して終了します。
私は多くの人から言われ、マルチプロセッシングを使用するときは共有メモリを使用しないようにする必要があるとドキュメントを読みました。これを回避する最善の方法は、プロセスをデーモン化し、カスタム シグナル ハンドラを指定して、sigint/sigterm/etc を送信することだと言われました。
私の質問は、bool を排他的に使用してループを維持し、その値を親プロセスからのみ変更し、複数の子プロセスからそれを読み取って、すべての子プロセスを迅速かつ安全に終了させる適切なソリューションですか? x個の署名を送信するよりも、すべての子供が1つの共有ブールを見るだけのオーバーヘッドが少ないように感じます。
デーモン化はより良い解決策でしょうか? もしそうなら、私はその理由を理解する助けが欲しい.