亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么在Python的線程內調用sys.exit()時不退出?

為什么在Python的線程內調用sys.exit()時不退出?

皈依舞 2019-11-28 13:56:28
這可能是一個愚蠢的問題,但是我正在測試我對Python的一些假設,并且對為什么以下代碼段在線程中調用時不退出而在主線程中調用時退出而感到困惑。import sys, timefrom threading import Threaddef 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()的調用只是退出了該單獨的實例?如果是這樣,線程實現如何管理對共享資源的訪問?如果我確實想從線程中退出程序(不是我真正想要的,但據我所知)怎么辦?
查看完整描述

3 回答

?
躍然一笑

TA貢獻1826條經驗 獲得超6個贊

sys.exit()和thread.exit()都會引發SystemExit異常。因此,當sys.exit()在該線程內引發該異常時,它的作用與調用thread.exit()的作用相同,這就是為什么僅線程退出的原因。


查看完整回答
反對 回復 2019-11-28
?
拉丁的傳說

TA貢獻1789條經驗 獲得超8個贊

如果我確實想從線程中退出程序怎么辦?


除了Deestan描述的方法之外,您還可以調用os._exit(注意下劃線)。使用之前,請確保你明白,它沒有清理(如呼叫__del__或類似)。


查看完整回答
反對 回復 2019-11-28
?
天涯盡頭無女友

TA貢獻1831條經驗 獲得超9個贊

如果我確實想從線程中退出程序(不是我真正想要的,但據我所知)怎么辦?


至少在Linux上,您可以執行以下操作:


os.kill(os.getpid(), signal.SIGINT)

這會將SIGINT發送到主線程,在此可以將其作為KeyboardInterrupt處理。


順便說一句:在Windows上,您只能發送


查看完整回答
反對 回復 2019-11-28
  • 3 回答
  • 0 關注
  • 2188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號