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