问题
What is the difference between thread.start_new_thread
and threading.Thread.start
in python?
I have noticed that when start_new_thread
is called, the new thread terminates as soon as the calling thread terminates. threading.Thread.start
is the opposite: the calling thread waits for other threads to terminate.
回答1:
The thread
module is the low-level threading API of Python. Its direct usage isn't recommended, unless you really need to. The threading
module is a high-level API, built on top of thread
. The Thread.start
method is actually implemented using thread.start_new_thread
.
The daemon
attribute of Thread
must be set before calling start
, specifying whether the thread should be a daemon. The entire Python program exits when no alive non-daemon threads are left. By default, daemon
is False
, so the thread is not a daemon, and hence the process will wait for all its non-daemon thread to exit, which is the behavior you're observing.
P.S. start_new_thread
really is very low-level. It's just a thin wrapper around the Python core thread launcher, which itself calls the OS thread spawning function.
回答2:
See the threading.Thread.daemon flag - basically whenever no non-daemon threads are running, the interpreter terminates.
来源:https://stackoverflow.com/questions/5882362/thread-start-new-thread-vs-threading-thread-start