Это может быть глупый вопрос, но я тестирую некоторые из моих предположений о 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() просто выходит из этого отдельного экземпляра? Если да, то каким образом реализация потоковой передачи управляет доступом к общим ресурсам? Что делать, если я действительно хочу выйти из программы из потока (не то, что я на самом деле хочу, но именно так понимаю)?