Python守护线程及作用
发布时间:2025-10-13 17:53:28

后台运行有一个线程,其任务是为其他线程提供服务,称为“后台线程”(Daemon Thread)又称“守护线程”或“精灵线程”。Python 解释器的垃圾回收线程是典型的后台线程。
后台线程有一个特点,如果所有前台线程都死了,那么后台线程就会自动死亡。
调用 Thread 对象的 daemon 属性可以将指定的线程设置为后台线程。下面的程序将指定的线程设置为后台线程,当所有的前台线程都死亡时,后台线程就会死亡。当整个虚拟机中只剩下后台线程时,程序不需要继续运行,因此程序退出。
importthreading #定义后台线程的线程执行体与普通线程没有区别 defaction(max): foriinrange(max): print(threading.current_thread().name+""+str(i)) t=threading.Thread(target=action,args=(100,),name='后台线程') #将此线程设置为后台线程 #在创建Thread对象时,也可以通过daemon参数将其设置为后台线程 t.daemon=True #启动后台线程 t.start() foriinrange(10): print(threading.current_thread().name+""+str(i)) #-----在这里执行程序,前台线程(主线程)结束------ #后台线程也应该结束
在上述程序中,先将 t 将线程设置为后台线程 10 行代码),然后启动线程。线程应该执行到 i 等于 99 只有在运行程序时才会结束,但不难发现后台线程无法运行 99.因为当主线程是程序中唯一的前台线程运行时,程序会主动退出,所以后台线程就结束了。
从上述程序可以看出,主线程默认为前台线程,T线程默认为前台线程。但并不是所有的线程都是前台线程,有些线程是后台线程。前台线程创建的子线程默认为前台线程,后台线程创建的子线程默认为后台线程。
可以看出,创建后台线程有两种方式:
线程的主动 daemon 属性设置为 True。
默认情况下,后台线程启动的线程是后台线程。
请注意,当前台线程死亡后,Python 解释器会通知后台线程死亡,但从接收指令到响应需要一定的时间。如果要将某个线程设置为后台线程,则必须在线程启动前设置。换句话说,它将 daemon 属性设为 True,必须在 start() 方法调用前进行,否则会引起 RuntimeError 异常。
下一篇 Python创建线程
