[解決済み] Pythonのスレッド内でsys.exit()が呼び出されたときに終了しないのはなぜですか?
2022-09-30 23:28:51
質問
これは愚かな質問かもしれませんが、私はPythonに関するいくつかの仮定をテストしており、以下のコードスニペットがスレッドで呼び出されたときに終了せず、メインスレッドで呼び出されたときに終了する理由について混乱しています。
import sys, time
from threading import Thread
def testexit():
time.sleep(5)
sys.exit()
print "post thread exit"
t = Thread(target = testexit)
t.start()
t.join()
print "pre main exit, post thread exit"
sys.exit()
print "post main exit"
sys.exit()のドキュメントには、呼び出しがPythonから終了するようにと書かれています。私はこのプログラムの出力から、"post thread exit" が決して出力されないことを見ることができますが、メインスレッドはスレッドが exit を呼び出した後でもただ進み続けています。
インタープリタの個別のインスタンスが各スレッドに対して作成され、exit() の呼び出しはその個別のインスタンスを終了させているだけでしょうか。もしそうなら、スレッド化実装は共有リソースへのアクセスをどのように管理するのでしょうか。もし私がスレッドからプログラムを終了したい場合 (実際に終了したいわけではありませんが、私が理解できるように) はどうすればよいでしょうか?
どのように解決するのですか?
sys.exit()
は
SystemExit
と同様に例外が発生します。
thread.exit()
. そのため
sys.exit()
がそのスレッド内で例外を発生させると、そのスレッドで
thread.exit()
を呼び出すのと同じ効果があり、そのためそのスレッドだけが終了します。
関連
-
[解決済み] なぜPythonのコードは関数の中でより速く実行されるのですか?
-
[解決済み] Pythonの終了コマンド - なぜこんなにたくさんあるのか、そしてそれぞれはいつ使うべきなのか?
-
[解決済み] Pythonのexit()とsys.exit()の違いについて
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] Pandasのデータフレームでタプルの列を分割するにはどうしたらいいですか?
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] pandasのタイムゾーンに対応したDateTimeIndexを、特定のタイムゾーンに対応したナイーブなタイムスタンプに変換する。
-
[解決済み] Pandasを使って、既存のExcelファイルに新しいシートを保存する方法は?
-
[解決済み] PythonのRequestsモジュールを使ってWebサイトに "ログイン "するには?
-
[解決済み] Django filter queryset __in for *every* item in list
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] スクリプトを終了させるには?
-
[解決済み] Spyderを仮想環境で動作させるには?
-
[解決済み] Pythonのインスタンス変数とクラス変数
-
[解決済み] 範囲指定された浮動小数点数のランダムな配列を生成します。
-
[解決済み] Django 1.7で初期マイグレーションからマイグレートバックする方法は?
-
[解決済み] Ctrl-CでPythonスクリプトを終了できない
-
[解決済み] サブフォルダからのインポートモジュール
-
[解決済み] CSVデータを処理する際、1行目のデータを無視する方法を教えてください。
-
[解決済み] djangoフレームワークでフォームフィールドから値を取得するには?
-
[解決済み] Pandasのデータフレーム内の文字列を'date'データ型に変換するにはどうしたらいいですか?