thread.start_new_thread 与 threading.Thread.start的区别
在Python中,thread.start_new_thread
和threading.Thread.start
有什么区别呢?
我发现,当调用start_new_thread
时,新线程会在调用它的线程结束后立刻结束。而threading.Thread.start
则正好相反:调用它的线程会等其他线程结束后才结束。
2 个回答
1
看看这个 threading.Thread.daemon 标志。简单来说,当没有其他非守护线程在运行时,解释器就会结束。
13
thread
模块是Python中用于处理线程的底层接口。一般情况下,不建议直接使用这个模块,除非你真的有必要。相对来说,threading
模块是一个更高级的接口,它是在thread
的基础上构建的。Thread.start
这个方法实际上是通过thread.start_new_thread
来实现的。
Thread
的daemon
属性必须在调用start
之前设置,这个属性决定了线程是否是守护线程。整个Python程序会在没有存活的非守护线程时退出。默认情况下,daemon
是False
,这意味着线程不是守护线程,因此程序会等待所有非守护线程结束,这就是你观察到的行为。
补充说明:start_new_thread
确实是非常底层的。它只是对Python核心线程启动器的一个简单封装,而这个启动器又会调用操作系统的线程创建功能。