2012-04-10 5 views
4

私は比較的新しいPythonで、sys.exit()の動作を理解したいと思っています。デーモンではないスレッドがロックで無期限に待機しているときのPythonのsys.exitの動作

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

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

ご協力いただきありがとうございます。

+1

このようにプログラムを別の方法で終了すると、おそらく次のようになります。http://stackoverflow.com/questions/173278/is-there-a-way-to-prevent-a-systemexit-exception-raised-from-sys-exit -from-bei – cptPH

答えて

4

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

ロックを待っているデーモンではないスレッドがある場合はロックが解放されるように手配しないと、メインスレッドは終了時にハングします。 を使用して直接プログラムを終了することもできますが、これはすべてのクリーンアップ機能をバイパスし、アプリケーションには適していない可能性があります。

+0

答えをありがとう。 – Buchi

関連する問題