Może to być głupie pytanie, ale testuję niektóre z moich założeń dotyczących Pythona i nie wiem, dlaczego następujący fragment kodu nie kończy się po wywołaniu w wątku, ale kończy się po wywołaniu w wątku głównym.
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"
Dokumentacja sys.exit () stwierdza, że wywołanie powinno zakończyć się z Pythona. Widzę na wyjściu tego programu, że „post wątek wyjścia” nigdy nie jest drukowany, ale główny wątek po prostu działa nawet po wywołaniu wątku wyjścia.
Czy dla każdego wątku tworzona jest osobna instancja interpretera, a wywołanie exit () właśnie kończy pracę z tej oddzielnej instancji? Jeśli tak, w jaki sposób implementacja obsługi wątków zarządza dostępem do współdzielonych zasobów? A co jeśli chciałbym wyjść z programu z wątku (nie to, że tak naprawdę chcę, ale tylko po to, żeby zrozumieć)?