スレッドが完了すると、非デーモン スレッドのリソースは OS に解放されますか? つまり、メイン スレッドがこれらの非デーモン スレッドで join() を呼び出していない場合、Python GC はそれらのスレッドで join を呼び出し、スレッドが保持していたリソースを解放しますか?
2 に答える
関数を実行するスレッドを生成し、その関数がプログラムの終了前に完了する場合、はい、(a) 実行されなくなり、(b) 何からも参照されなくなると、スレッドはガベージ コレクションを取得します。そうしないと。
" スレッドは「デーモン スレッド」としてフラグを立てることができます。このフラグの意味は、デーモン スレッドだけが残ったときに Python プログラム全体が終了することです。初期値は、作成中のスレッドから継承されます。フラグは、デーモンを通じて設定できます。注意: デーモン スレッドはシャットダウン時に突然停止します. それらのリソース (開いているファイル、データベース トランザクションなど) は適切に解放されない可能性があります. スレッドを正常に停止させたい場合は、それらを非デーモンにして、適切なシグナルを使用してくださいイベントなどのメカニズム。 " -- Python Thread Docs
デーモンは Python によってクリーンアップされますが、非デーモン スレッドはそうではありません。停止するようシグナルを送る必要があります。ただし、これはいくつかの複雑な並列コードを実行するのに役立ちます:)これは、非デーモンスレッドを使用する場合、手動でクリーンアップするためにランダムなダミー/役に立たないスレッドを配置できることを意味します。
tl;dr 非デーモンスレッドは「終了」することはありません。独自のメカニズムまたは SIGTERM などの SIGS の 1 つを介して終了するようにシグナルを送る必要があります。