Esta pode ser uma pergunta estúpida, mas estou testando algumas de minhas suposições sobre Python e estou confuso sobre por que o seguinte trecho de código não sairia quando chamado no thread, mas sairia quando chamado no thread principal.
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"
Os documentos para sys.exit () afirmam que a chamada deve sair do Python. Eu posso ver na saída deste programa que "post thread exit" nunca é impresso, mas o thread principal continua mesmo após a saída das chamadas de thread.
Uma instância separada do interpretador está sendo criada para cada thread e a chamada para exit () está apenas saindo dessa instância separada? Em caso afirmativo, como a implementação de encadeamento gerencia o acesso a recursos compartilhados? E se eu quisesse sair do programa do thread (não que eu realmente queira, mas apenas para que eu entenda)?