5

私は比較的 Python に慣れていないので、次の場合の sys.exit() の動作を理解したいと思います。

メイン スレッドは sys.exit() を呼び出しますが、別の非デーモン スレッドがすでに何らかのロックを無期限に待機していました。

私は自分のプログラムでこれをテストしましたが、プログラム全体が終了しないようです。これは期待されていますか?非デーモン スレッドが SystemExit 例外を処理しているかどうかはわかりません。それはサード パーティのライブラリにあるためです。

助けてくれてありがとう。

4

1 に答える 1

5

モジュールで作成されたスレッドのthreading場合、メイン スレッドは終了時にすべての非デーモン スレッドに参加します。(Python 2.4.5、2.7.2、および 3.2.2 ソースで検証済み) をthreading.py検索すると、これを確認できます。exitfunc

ロックを待機している非デーモン スレッドがあり、ロックが解放されるように調整しない場合、メイン スレッドは終了時にハングします。

Patrick が述べたように、 を使用してプログラムをより直接的に終了できますexit_が、これはすべてのクリーンアップ関数をバイパスするため、アプリケーションには適していない可能性があります。

于 2012-04-11T16:07:32.877 に答える