python中thread.start_new_thread
和threading.Thread.start
之间有什么区别?
我注意到,当调用start_new_thread
时,新线程会在调用线程终止后立即终止。 threading.Thread.start
正好相反:调用线程等待其他线程终止。
答案 0 :(得分:11)
thread
模块是Python的低级线程API。除非您确实需要,否则不建议直接使用。 threading
模块是一个高级API,构建于thread
之上。 Thread.start
方法实际上是使用thread.start_new_thread
实现的。
daemon
的{{1}}属性必须在调用Thread
之前设置,指定线程是否应该是守护进程。当没有剩下活着的非守护程序线程时,整个Python程序退出。默认情况下,start
为daemon
,因此该线程不是守护进程,因此进程将等待其所有非守护进程线程退出,这是您正在观察的行为。
P.S。 False
确实非常低级。它只是Python核心线程启动器的一个薄包装器,它本身称为OS线程生成函数。
答案 1 :(得分:1)
请参阅threading.Thread.daemon标志 - 基本上每当没有运行非守护程序线程时,解释器就会终止。