Python 的守护线程

Python 的守护线程

Python 的守护线程

通常在一个应用程序中,主程序隐式地等待所有线程执行完毕。然而,有时候,我们需要在后台运行一些线程,不阻止主程序结束运行。这种线程叫作守护线程(daemon thread)。只要主程序(包含非守护线程)在运行,守护线程就会一直处于活动状态。一旦非守护线程退出,就可以终止守护线程。

在某些情况下,如果一个线程在执行过程中死亡而不会丢失或损坏任何数据,那么使用守护线程就很受欢迎。

一个线程可以用下面的两种方法之一,被声明为守护线程:

  • 在创建 Thread 对象时,在构造函数中,把 daemon 属性设置为 True
  • 把已创建的 Thread 对象的 daemon 属性设直为 True

如果一个线程被设置为守护线程,我们在启动它后,就可以把它忘了。在调用它的程序退出后,守护线程会被自动终止。

下面的代码同时演示了守护线程和非守护线程。

from  threading import Thread, current_thread
from time import sleep

def daemon_func():
    sleep(3)
    print("{}: 来自于守护线程的问候。".format(current_thread().name))

def non_daemon_func():
    sleep(1)
    print("{}: 来自于非守护线程的问候。".format(current_thread().name))

#创建线程

t1 = Thread(target=daemon_func, name="守护线程", daemon=True)
t2 = Thread(target=non_daemon_func, name = "非守护线程")

#启动线程
t1.start()
t2.start()

print("主线程退出。")

上面代码的输出结果是:

主线程退出。
非守护线程: 来自于非守护线程的问候。

由于我们没有在主线程中使用 join 方法,所以主线程首先退出,接下来是非守护线程退出。但是我们没有看到守护线程输出消息。这是因为守护线程在非守护线程结束的同一时间,就被终止了。如果我们把非守护线程的等待时间从 1 秒改为 5 秒,那么输出结果就会是下面这样子:

主线程退出。
守护线程: 来自于守护线程的问候。
非守护线程: 来自于非守护线程的问候。

<完>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dowhileprogramming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值