72

スレッドをデーモンに設定することの意味について少し混乱しています。

ドキュメントには次のように書かれています。

スレッドは「デーモンスレッド」としてフラグを立てることができます。このフラグの意味は、デーモン スレッドだけが残ったときに Python プログラム全体が終了することです。初期値は作成スレッドから継承されます。フラグはデーモン プロパティを介して設定できます。

これが通常のスレッドと何が違うのかわかりません。

これは、このプログラムが決して終わらないということですか?

def threadfunc():
    while True:
        time.sleep(1)

threading.Thread(target=threadfunc).start()

メインスレッドが実行を終了しても。すぐに終了しますが?

def threadfunc():
    while True:
        time.sleep(1)

th = threading.Thread(target=threadfunc)
th.daemon = True
th.start()

メインスレッドで sys.exit() を呼び出している状況があり、ログを見るとプロセスがハングし、他のスレッドが実行されているため、質問します。

これは、スレッドが生きている状態で呼び出される sys.exit() と関係がありますか?

4

3 に答える 3

51

これは、このプログラムが決して終わらないということですか?

はい、そのプログラムは終了しません。試してみてください。

メインスレッドで sys.exit() を呼び出している状況があり、ログを見るとプロセスがハングし、他のスレッドが実行されているため、質問します。これは、スレッドが生きている状態で呼び出される sys.exit() と関係がありますか?

はい、exit他のスレッドを停止することさえありませんSystemExit。メインスレッドで発生するだけです。そのため、メイン スレッドが停止している間 (他の未処理の例外の場合と同様)、他のすべての非デーモン スレッドは引き続き動作します。

于 2010-12-01T23:19:19.363 に答える
18

設定thread.daemon = Trueすると、メイン プログラムを終了できます。アプリは通常、すべての子スレッドが終了するまで待ってから完了します。

于 2010-12-01T23:24:41.297 に答える
7
th.daemon = True #set this thread as a Daemon Thread

デーモン スレッドをサービスとして考えることができます。これは、コンピューターのバックグラウンドで実行され、ファイルのインデックス作成、xml の解析、ニュースの取得など、長時間実行されるプロセスのようなさまざまなタスクを実行することを意味します。

メインスレッドは終了し、デーモンは引き続きバックグラウンドで実行されます。これが、無限ループを配置したいだけでスレッドがまだ実行されていることを確認する場合に、プログラム別名メインスレッドが終了する理由です。デーモン スレッドの例は、ガベージ コレクションです。

于 2016-01-16T19:49:17.613 に答える