为什么在Python中在线程内调用sys.exit()时无法退出?

16 浏览
0 Comments

为什么在Python中在线程内调用sys.exit()时无法退出?

我对下面的代码片段为何在线程中调用时不会退出,但在主线程中调用时会退出感到困惑。

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()的调用只是退出了该单独的实例?如果是这样,线程实现如何管理对共享资源的访问?如果我确实想从线程中退出程序,该怎么办(虽然我实际上并不想这样做,只是为了理解)?

0