thread.start_new_thread vs threading.Thread.start

时间:2011-05-04 11:01:23

标签: python multithreading new-operator

python中thread.start_new_threadthreading.Thread.start之间有什么区别?
 我注意到,当调用start_new_thread时,新线程会在调用线程终止后立即终止。 threading.Thread.start正好相反:调用线程等待其他线程终止。

2 个答案:

答案 0 :(得分:11)

thread模块是Python的低级线程API。除非您确实需要,否则不建议直接使用。 threading模块是一个高级API,构建于thread之上。 Thread.start方法实际上是使用thread.start_new_thread实现的。

daemon的{​​{1}}属性必须在调用Thread之前设置,指定线程是否应该是守护进程。当没有剩下活着的非守护程序线程时,整个Python程序退出。默认情况下,startdaemon,因此该线程不是守护进程,因此进程将等待其所有非守护进程线程退出,这是您正在观察的行为。


P.S。 False确实非常低级。它只是Python核心线程启动器的一个薄包装器,它本身称为OS线程生成函数。

答案 1 :(得分:1)

请参阅threading.Thread.daemon标志 - 基本上每当没有运行非守护程序线程时,解释器就会终止。