thread.start_new_thread vs threading.Thread.start

gme*_*mon 9 python multithreading new-operator

thread.start_new_threadthreading.Thread.startpython有什么区别?
我注意到start_new_thread调用时,一旦调用线程终止,新线程就会终止.threading.Thread.start相反:调用线程等待其他线程终止.

Eli*_*sky 11

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

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


PS start_new_thread真的很低级.它只是Python核心线程启动器的一个薄包装器,它本身称为OS线程生成函数.