thread.start_new_thread 与 threading.Thread.start的区别

9 投票
2 回答
6368 浏览
提问于 2025-04-16 16:58

在Python中,thread.start_new_threadthreading.Thread.start有什么区别呢?
我发现,当调用start_new_thread时,新线程会在调用它的线程结束后立刻结束。而threading.Thread.start则正好相反:调用它的线程会等其他线程结束后才结束。

2 个回答

1

看看这个 threading.Thread.daemon 标志。简单来说,当没有其他非守护线程在运行时,解释器就会结束。

13

thread模块是Python中用于处理线程的底层接口。一般情况下,不建议直接使用这个模块,除非你真的有必要。相对来说,threading模块是一个更高级的接口,它是在thread的基础上构建的。Thread.start这个方法实际上是通过thread.start_new_thread来实现的。

Threaddaemon属性必须在调用start之前设置,这个属性决定了线程是否是守护线程。整个Python程序会在没有存活的非守护线程时退出。默认情况下,daemonFalse,这意味着线程不是守护线程,因此程序会等待所有非守护线程结束,这就是你观察到的行为。


补充说明:start_new_thread确实是非常底层的。它只是对Python核心线程启动器的一个简单封装,而这个启动器又会调用操作系统的线程创建功能。

撰写回答