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

问题描述 投票:83回答:5

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

python python-2.6
5个回答
62
投票

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


21
投票

如果我确实要退出该程序怎么办从线程?


16
投票

如果我确实要从线程中退出程序(不是我实际上想要,但是据我了解)?


11
投票

打印出“前主出口,后螺纹出口”的事实困扰着您吗?


11
投票

如果我确实要退出该程序怎么办从线程(不是我实际上想,但据我了解)?

© www.soinside.com 2019 - 2024. All rights reserved.