为什么在Python的线程内调用sys.exit()时不退出?

发布于 2021-01-29 15:06:12

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

关注者
0
被浏览
105
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    sys.exit()和一样引发SystemExit异常thread.exit()。因此,当sys.exit()在该线程内引发该异常时,它的作用与调用相同thread.exit(),这就是为什么只有该线程退出的原因。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看