知行编程网知行编程网  2022-11-26 10:00 知行编程网 隐藏边栏  31 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于Python守护线程及作用的相关知识,包括python线程安全,以及python守护线程的作用这些编程知识,希望对大家有参考作用。

Python守护线程及其作用

有一个线程在后台运行,它的任务是为其他线程提供服务。这个线程称为“Daemon Thread”,也称为“Daemon Thread”或“Elf Thread”。 Python解释器的垃圾回收线程就是一个典型的后台线程。

后台线程有一个特点,如果所有的前台线程都死了,后台线程也会自动死掉。

调用Thread对象的daemon属性可以将指定的线程设置为后台线程。以下程序将指定线程设置为后台线程。可以看到,当所有的前台线程都死掉的时候,后台线程也死掉了。当整个虚拟机只剩下后台线程时,程序就没有继续运行的必要了,程序就退出了。

import threading

# 定义后台线程的线程执行体与普通线程没有任何区别
def action(max):
    for i in range(max):
        print(threading.current_thread().name + "  " + str(i))
t = threading.Thread(target=action, args=(100,), name='后台线程')
# 将此线程设置成后台线程
# 也可在创建Thread对象时通过daemon参数将其设为后台线程
t.daemon = True
# 启动后台线程
t.start()
for i in range(10):
    print(threading.current_thread().name + "  " + str(i))
# -----程序执行到此处,前台线程(主线程)结束------
# 后台线程也应该随之结束

在上面的程序中,首先将t线程设置为后台线程(第10行),然后启动该线程。本来线程应该执行到i等于99,但是在运行程序的时候不难发现后台线程不能运行到99,因为当程序中唯一的前台线程主线程结束时运行,程序会主动退出,这样后台线程就结束了。

从上面的程序可以看出,主线程默认是前台线程,t线程默认也是前台线程。但并不是所有线程默认都是前台线程,有些线程默认是后台线程。前台线程创建的子线程默认为前台线程,后台线程创建的子线程默认为后台线程。

可见,创建后台线程有两种方式:

主动将线程的 daemon 属性设置为 True。

后台线程启动的线程默认是后台线程。

注意当前前台线程死亡后,Python解释器会通知后台线程死亡,但是从接收到指令到响应需要一定的时间。如果一个线程要设置为后台线程,则必须在线程启动前设置。也就是说,必须在调用 start() 方法之前将 daemon 属性设置为 True,否则将引发 RuntimeError 异常。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享