multithreading true join - Python thread daemon property

1 Answers

Setting thread.daemon = True will allow the main program to exit. Apps normally wait till all child threads are finished before completing.

cleanup stop exception

I'm a little confused about what setting a thread to be a daemon means. The documentation says this:

A thread can be flagged as a “daemon thread”. The significance of this flag is that the entire Python program exits when only daemon threads are left. The initial value is inherited from the creating thread. The flag can be set through the daemon property.

I'm not sure what makes this different from a normal thread. Is this saying that this program won't ever finish?

def threadfunc():
    while True:


even though the main thread finishes it's execution. While

def threadfunc():
    while True:

th = threading.Thread(target=threadfunc)
th.daemon = True

will finish immediately?

I ask because I have a situation where in my main thread I'm calling sys.exit(), and the process just hangs and my other threads are running as I can see the log. Does this have anything to do with sys.exit() being called with threads alive?