Python守护线程及作用

有一种线程,它是在后台运行的,它的任务是为其他线程提供服务,这种线程被称为“后台线程(Daemon 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 解释器会通知后台线程死亡,但是从它接收指令到做出响应需要一定的时间。如果要将某个线程设置为后台线程,则必须在该线程启动之前进行设置。也就是说,将 daemon 属性设为 True,必须在 start() 方法调用之前进行,否则会引发 RuntimeError 异常。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/415406.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Kafka Console Client 的 Consumer Group

以往使用 kafka-console-consumer.sh 消费 Kafka 消息时并没有太在意过 Consumer Group,在命令行中也不会使用 --group 参数,本文针对 Kafka Console Client 命令行中的 Consumer Group 进行一次统一说明。 1. 如不设置 --group 参数会自动生成一个 Con…

排序:非递归的归并排序

目录 递归与非递归的思想对比: 递归: 非递归: 代码解析: 完整代码: 递归与非递归的思想对比: 递归: 在之前的归并排序,它的核心思想是通过不断的分割,从一个数组变…

【分布式监控】zabbix与grafana连接

1.在zabbix- server服务端安装grafana,并启动服务 先在官网下载软件 https://grafana.com/grafana/download/9.4.7?editionenterprise&pggraf&plcmtdeploy-box-1#可以翻译成中文介绍,很详细的教程 yum install -y https://dl.grafana.com/ent…

逆向思维,去重Cube计算优化新技巧

场景描述 在做数据汇总计算和统计分析时,最头疼的就是去重类指标计算(比如用户数、商家数等),尤其还要带多种维度的下钻分析,由于其不可累加的特性,几乎每换一种统计维度组合,都得重新计算。数…

HJ-FR3协作机器人为什么备受高校和科研机构青睐?

一、协作机器人研究现状 协作机器人是能够在共享空间中与人类交互并开展安全工作的新型机器人,由于轻量、安全的特点,在柔性制造、社会服务、医疗健康等领域展现出了良好的应用前景,也成为了当前学术界机器人领域的研究热点,相关研…

安卓开发-day

一、安卓项目结构 1、manifests文件夹 Android系统配置文件夹,包含一个AndroidManifest.xml文件; AndroidMainifest.xml文件是每个android项目必须要包含的文件(项目唯一),创建项目时默认就会生成这个文件&#xff0…

Rust-泄漏

在C中,如果引用计数智能指针出现了循环引用,就会导致内存泄漏。而Rust中也一样存在引用计数智能指针Rc,那么Rust中是否可能制造出内存泄漏呢? 内存泄漏 首先,我们设计一个Node类型,它里面包含一个指针,可以指向其他…

如何用ArcGIS制作城市用地适应性评价

01概述 “城市用地适宜性评价是城市总体规划的一项重要前期工作,它首先对工程地质、社会经济和生态环境等要素进行单项用地适宜性评价,然后用地图叠加技术根据每个因子所占权重生成综合的用地适宜性评价结果,俗称“千层饼模式”。 做用地适…

Qt简单使用与初识

🌇个人主页:平凡的小苏 📚学习格言:命运给你一个低的起点,是想看你精彩的翻盘,而不是让你自甘堕落,脚下的路虽然难走,但我还能走,比起向阳而生,我更想尝试逆风…

Ant Design Vue上传多个图片

模板代码&#xff1a; 定义变量&#xff1a; 文件限制的函数&#xff1a; 上传的函数&#xff1a; 样式函数&#xff1a; 完整代码&#xff1a; <template><div class"dialog-upload" v-if"showUploadDialog"><div class"dialog-uplo…

npm pnpm yarn 报错或常见问题处理集锦

各种卡死&#xff0c;报错问题处理汇总 1. npm 安装 卡死了怎么办&#xff0c;npm # 切换源 npm config set registry https://registry.npmmirror.com # 查看源 npm config get registry2. pnpm安装 卡死了怎么办 方法1&#xff1a;切换源 npx pnpm config set registry h…

京东ES支持ZSTD压缩算法上线了:高性能,低成本 | 京东云技术团队

1 前言 在《ElasticSearch降本增效常见的方法》一文中曾提到过zstd压缩算法[1]&#xff0c;一步一个脚印我们终于在京东ES上线支持了zstd&#xff1b;我觉得促使目标完成主要以下几点原因&#xff1a; Elastic官方原因&#xff1a;zstd压缩算法没有在Elastic官方的开发计划中&…