I am confused as to why the following code snippet would not exit when called in the thread, but would exit when called in the main thread.
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"
The docs for sys.exit()
state that the call should exit from Python. I can see from the output of this program that “post thread exit” is never printed, but the main thread just keeps on going even after the thread calls exit.
Is a separate instance of the interpreter being created for each thread, and the call to exit()
is just exiting that separate instance? If so, how does the threading implementation manage access to shared resources? What if I did want to exit the program from the thread (not that I actually want to, but just so I understand)?
Advertisement
Answer
sys.exit()
raises the SystemExit
exception, as does thread.exit()
. So, when sys.exit()
raises that exception inside that thread, it has the same effect as calling thread.exit()
, which is why only the thread exits.