文档章节

说说Python多线程中的daemon属性方法

程序猿刚子
 程序猿刚子
发布于 2016/11/03 19:47
字数 669
阅读 280
收藏 1

大家看多线程部分的时候肯定看到过daemon这个属性,当我在百度了一圈后也没发现有比较好的解释(或者大家对这个解释都非常清楚),于是自己通过代码和官方介绍了解它,进行了一些总结 给大家一些参考。

 

首先我们看官方的介绍是这样的:

A boolean value indicating whether this thread is a daemon thread (True) or not (False). This must be set before start() is called, otherwise RuntimeError is raised. Its initial value is inherited from the creating thread; the main thread is not a daemon thread and therefore all threads created in the main thread default to daemon = False.

 

The entire Python program exits when no alive non-daemon threads are left.

 

大概的意思就是说:这个属性为一个布尔值,表示是否为一个守护进程,且这个属性设置必须在线程的start方法开始之前调用。它的值继承自主线程,主线程的daemon为False且所有从主线程创建的线程都是daemon = False的。

 

下面一句说明了,python主程序只有在没有非守护线程的时候才会退出。

 

我在用多线程的时候和看这些介绍的时候2个疑惑:

  1. 有的多线程主线程结束,其他的线程就结束了(thread方式)。 而有的主线程则阻塞等待其他线程执行完毕才继续执行(threading方法)

  2. 主线程中创建的线程都是非守护线程吗?

 

我们都知道创建线程有最常用的2个方法,分别利用thread和threading模块

那么我们用代码看看实际的执行情况是怎样的


代码中我们可以看到,创建的线程输出的daemon是True。 可见问题2是说的不对的。 也就是说在主线程中用start_new_thread创建的线程其实是daemon=True的。这样就可以解释我们的主程序不会等待daemon程序执行完毕这个情况了。通过取消注释sleep语句,我们可以看到主程序执行完毕后其他线程也被销毁了。

 

那么我们接下来看看利用threading模块创建的程序执行情况如何?


从上面的类方式创建的多线程我们可以清晰的看到,此种方式创建的为线程daemon=False。 且会阻塞住主线程的执行

 

解释就到这里了,不知道有同样疑惑的伙伴儿们对你是否有一些帮助。

 

程序猿、工程师精彩分享

微信号:studypython

欢迎关注公众号 "人生苦短我用Python"

--------------------------------------

 

© 著作权归作者所有

程序猿刚子
粉丝 14
博文 18
码字总数 7972
作品 0
丰台
高级程序员
私信 提问
一篇文章搞定Python多进程(全)

公众号:pythonislover 前面写了三篇关于python多线程的文章,大概概况了多线程使用中的方法,文章链接如下: 一篇文章搞懂Python多线程简单实现和GIL - https://mp.weixin.qq.com/s/Hgp-x-...

南山yrg
05/05
0
0
python自动化运维之多进程

python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程。Python提供了非常好用的多进程包multiprocessing,只需要定义一个函数,P...

炫维
2018/06/26
0
0
[Python] 多线程编程

Python 提供了几个用于多线程编程的模块,包括thread, threading 和Queue 等。thread 和threading 模块允许程序员创建和管理线程。thread 模块提供了基本的线程和锁的支持,而threading提供了...

长平狐
2013/06/03
166
2
第23天:Python 多线程之 threading 模块

by 程序员野客 在之前的文章中,我们已经介绍了 Python 通过 thread 和 threading 模块提供了对多线程的支持,threading 模块兼具了 thread 模块的现有功能,又扩展了一些新的功能,具有十分...

纯洁的微笑
09/28
0
0
起薪2万的爬虫工程师,Python需要学到什么程度才可以就业?

爬虫工程师的的薪资为20K起,当然,因为大数据,薪资也将一路上扬。那么,Python需要学到什么程度呢?今天我们来看看3位前辈的回答。 1、前段时间快要毕业,而我又不想找自己的老本行Java开发...

糖宝lsh
2018/12/15
475
1

没有更多内容

加载失败,请刷新页面

加载更多

深入理解表单脚本系列第二篇——表单字段

本文转载于:专业的前端网站➜深入理解表单脚本系列第二篇——表单字段 前面的话   表单字段又叫表单元素,表示表单所包含控件,如<input>、<select>等。本文将详细介绍表单字段的内容 访问...

前端老手
7分钟前
1
0
前端技术之:常用webpack插件

1、html-webpack-plugin Simplifies creation of HTML files to serve your webpack bundles. 主页地址: https://github.com/jantimon/html-webpack-plugin 安装方法: npm i --save-dev h......

popgis
12分钟前
4
0
IT兄弟连 HTML5教程 HTML5表单 多样的输入类型1

HTML5拥有多个新的表单输入类型,这些新特性提供了更好的输入控制和验证。并不是所有的主浏览器都支持新的input类型,不过我们可以在所有的主浏览器中使用它们,即使不被支持,仍然可以显示为...

老码农的一亩三分地
13分钟前
2
0
规则引擎

解决问题 版本迭代速度更不上业务变化,但是若多个业务同时变化,除了为每个业务设计专属配置项也不利于操作。就想服务接口单纯化,将复杂多变的业务逻辑交给规则引擎,让用户在web端或cs端自...

无极之岚
50分钟前
7
0
OSChina 周三乱弹 —— 欢迎你来做产品经理

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @巴拉迪维 :10多次劲歌金曲获奖,更多叱咤歌坛排名,黎明才应该是四大天王之首,只可惜拍的电影太少。单曲循环一个多月的歌,力荐 《无名份的...

小小编辑
今天
557
10

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部