当前位置: 首页 > article >正文

Python 的守护线程

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 秒,那么输出结果就会是下面这样子:

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

<完>


http://www.kler.cn/a/567414.html

相关文章:

  • 奇异值分解(SVD)的原理与应用
  • 每日一题之屏蔽信号
  • Nginx 配置与常用命令速查手册
  • 计算机视觉|ViT详解:打破视觉与语言界限
  • 【弹性计算】弹性裸金属服务器和神龙虚拟化(一):功能特点
  • PHP缓存技术优化:提升网站性能的关键
  • c++ std::forward_list使用笔记
  • 利用three.js在Vue项目中展示重构的stl模型文件
  • Java进阶——注解一文全懂
  • AIP-156 单例资源
  • 一周一个Unity小游戏2D反弹球游戏 - 球的死区及球重生
  • React + TypeScript 实现 SQL 脚本生成全栈实践
  • 3D打印涡轮叶片-当传统铸造遇上“不可能任务”
  • Pytest之fixture的常见用法
  • PyTorch 类声明中的 super().__init__()是什么?为什么必须写它?
  • 【Linux】Linux的进程控制
  • MyBatis基础模块-缓存模块
  • 小结:计算机网路中的性能指标小结
  • 8 - PS XADC接口实验
  • 1-kafka单机环境搭建