说说Python多线程中的daemon属性方法
2016-11-03 19:47
211 查看
大家看多线程部分的时候肯定看到过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个疑惑:
有的多线程主线程结束,其他的线程就结束了(thread方式)。 而有的主线程则阻塞等待其他线程执行完毕才继续执行(threading方法)
主线程中创建的线程都是非守护线程吗?
我们都知道创建线程有最常用的2个方法,分别利用thread和threading模块
那么我们用代码看看实际的执行情况是怎样的
代码中我们可以看到,创建的线程输出的daemon是True。 可见问题2是说的不对的。 也就是说在主线程中用start_new_thread创建的线程其实是daemon=True的。这样就可以解释我们的主程序不会等待daemon程序执行完毕这个情况了。通过取消注释sleep语句,我们可以看到主程序执行完毕后其他线程也被销毁了。
那么我们接下来看看利用threading模块创建的程序执行情况如何?
从上面的类方式创建的多线程我们可以清晰的看到,此种方式创建的为线程daemon=False。 且会阻塞住主线程的执行
解释就到这里了,不知道有同样疑惑的伙伴儿们对你是否有一些帮助。
[b]程序猿、工程师精彩分享[/b]
微信号:studypython
欢迎关注公众号 "人生苦短我用Python"
--------[b]------------------------------[/b]
首先我们看官方的介绍是这样的:
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个疑惑:
有的多线程主线程结束,其他的线程就结束了(thread方式)。 而有的主线程则阻塞等待其他线程执行完毕才继续执行(threading方法)
主线程中创建的线程都是非守护线程吗?
我们都知道创建线程有最常用的2个方法,分别利用thread和threading模块
那么我们用代码看看实际的执行情况是怎样的
代码中我们可以看到,创建的线程输出的daemon是True。 可见问题2是说的不对的。 也就是说在主线程中用start_new_thread创建的线程其实是daemon=True的。这样就可以解释我们的主程序不会等待daemon程序执行完毕这个情况了。通过取消注释sleep语句,我们可以看到主程序执行完毕后其他线程也被销毁了。
那么我们接下来看看利用threading模块创建的程序执行情况如何?
从上面的类方式创建的多线程我们可以清晰的看到,此种方式创建的为线程daemon=False。 且会阻塞住主线程的执行
解释就到这里了,不知道有同样疑惑的伙伴儿们对你是否有一些帮助。
[b]程序猿、工程师精彩分享[/b]
微信号:studypython
欢迎关注公众号 "人生苦短我用Python"
--------[b]------------------------------[/b]
相关文章推荐
- 说说Python多线程中的daemon属性方法
- python多线程中daemon的属性方法
- Python多线程学习 setDaemon方法
- Python 多线程常用属性和方法
- [Python]面向对象--属性和方法命名使用
- .net c# 自学日记之 类 对象 属性 方法 的 包 并发 多线程 多态
- python特殊属性和方法的运用
- python面向对象-属性和方法
- [Dynamic Language] Python 静态方法、类方法、属性
- python 方法属性(用户自定义方法,非内置方法)
- python创建只读属性对象的方法(ReadOnlyObject)
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- python学习笔记之七:魔法方法,属性
- python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法
- python面向对象编程(2)—— 实例属性,类属性,类方法,静态方法
- 8、Python-方法、属性、迭代器
- 说说Android 两种为自定义组件添加属性的使用方法和区别
- 说说Android 两种为自定义组件添加属性的使用方法和区别 推荐
- Python基础教程——9魔法方法、属性及迭代器【总结】
- 关于多线程学习总结(二) 了解线程的属性及方法