1. ホーム
  2. python

[解決済み] Pythonのスレッドからアプリケーション全体を終了させるには?

2023-05-30 06:31:53

質問

Pythonアプリケーションをスレッドから終了させるにはどうしたらよいですか? sys.exit() はそれが呼び出されたスレッドを終了させるだけなので、何の役にも立ちません。

を使いたいとは思いません。 os.kill() という解決策は使いたくありません。

どのように解決するのですか?

メインスレッド以外のすべてのスレッドがデーモンである場合、最適な方法は一般的に thread.interrupt_main() -- どのスレッドもこれを用いて KeyboardInterrupt を発生させることができます。これは通常、メインスレッドから適度にきれいに終了することにつながります(メインスレッドのファイナライザが呼び出されることなどを含む)。

もちろん、この結果、いくつかの非デーモンスレッドがプロセス全体を生かし続けることになる場合、フォローアップを行う必要があります。 os._exit でフォローする必要がありますが、私はそれは最後の手段だと考えています (たとえば kill -9 のようなものです)。なぜなら、これは非常に無骨に物事を終了させるからです(ファイナライザは実行されません。 try/finally のブロックになります。 with のブロックがあります。 atexit 関数など)。