这可能是一个愚蠢的问题,但我正在测试我对 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() 的调用只是退出该单独的实例?如果是这样,线程实现如何管理对共享资源的访问?如果我确实想从线程中退出程序怎么办(不是我真正想要的,但我明白了)?