2012-07-30 9 views
6

スレッドを使用したプログラムがあります。私のプログラムが閉じられると、スレッドはまだ実行されており、それは正常です。メインプログラムが終了したことをスレッドがどのように検出できるかを知りたい。それだけで。どうすればいい?python:スレッドが孤立しているときを検出するにはどうすればいいですか?

スレッドは無限ループにあり、キュー内の多くのオブジェクトを処理します。スレッドをデーモンとして定義することはできません。そうしないと、メインプログラムの最後にデータが失われる可能性があります。私は、私のメインプログラムが閉鎖時にブール値を設定することを望んでいません。

答えて

4

メインスレッドへのハンドルを取得できる場合は、is_alive()を呼び出してください。

また、threading.enumerate()に電話をかけて現在稼働しているすべてのスレッドのリストを取得し、メインスレッドがそこにあるかどうかを確認することができます。

それでも不可能な場合は、子スレッドが残っている唯一の非デーモンスレッドであるかどうかを確認することができます。

+0

これは私の問題を解決しました。 threading.enumerate内のスレッドのための '(): thread.getName場合()( "MainThread")を見つける= -1:。! thread.is_alive()= Trueの場合:! プリント他 "MainThreadが停止しています" : print "MainThread is running" – user1528760

0

マネージャーが開いているスレッドの数を追跡していたら、入力が不足したときに子供たちが殺されましたか?親はキューにデータをプッシュし始め、ワーカーはキューからデータを消費します。作業者が一定のタイムアウト時間内に待ち行列に何も見つからなかった場合、それは自分自身を殺すでしょう。主なスレッドは、アクティブなワーカーの数が所定のしきい値を下回っていた場合に、何人のワーカーが稼働しているかを追跡し、新しいワーカーを定期的に開始します。