スレッドを使ったプログラムがあります。プログラムを閉じても、スレッドはまだ実行されていますが、これは正常です。メインプログラムが終了したことをスレッドがどのように検出できるか知りたいのですが。単独でのみ。どうすればいいですか?
私のスレッドは無限ループにあり、キュー内の多くのオブジェクトを処理しています。スレッドをデーモンとして定義できません。そうしないと、メインプログラムの最後で一部のデータが失われる可能性があります。メインプログラムが閉じたときにブール値を設定したくありません。
スレッドを使ったプログラムがあります。プログラムを閉じても、スレッドはまだ実行されていますが、これは正常です。メインプログラムが終了したことをスレッドがどのように検出できるか知りたいのですが。単独でのみ。どうすればいいですか?
私のスレッドは無限ループにあり、キュー内の多くのオブジェクトを処理しています。スレッドをデーモンとして定義できません。そうしないと、メインプログラムの最後で一部のデータが失われる可能性があります。メインプログラムが閉じたときにブール値を設定したくありません。
メインスレッドへのハンドルを取得できれば、それを呼び出すことができますis_alive()
。
または、 を呼び出しthreading.enumerate()
て、現在実行中のすべてのスレッドのリストを取得し、メイン スレッドがそこにあるかどうかを確認することもできます。
または、それが不可能な場合でも、子スレッドが唯一残っている非デーモン スレッドであるかどうかを確認できる場合があります。
あなたのマネージャーが開いているスレッドの数を追跡し、入力が不足しているときに子供たちが自殺した場合、それは機能しますか?したがって、親はキューへのデータのプッシュを開始し、ワーカーはキューからのデータを消費します。ワーカーが特定のタイムアウト期間キューに何も見つからなかった場合、ワーカーは自殺します。次に、メインスレッドは、稼働しているワーカーの数を追跡し、アクティブなワーカーの数が特定のしきい値を下回った場合に定期的に新しいワーカーを開始します。