这可能是一个愚蠢的问题,但我正在测试我对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"
Run Code Online (Sandbox Code Playgroud)
sys.exit()的文档声明调用应该从Python退出.我可以从这个程序的输出中看到"post thread exit"永远不会被打印出来,但是主线程在线程调用exit之后仍然继续运行.
是否为每个线程创建了一个单独的解释器实例,而对exit()的调用只是退出该单独的实例?如果是这样,线程实现如何管理对共享资源的访问?如果我确实想要从线程中退出程序(不是我真的想要,但我只是理解)该怎么办?