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

你们看多线程部分的时候确定看到过daemon这个属性,当我在百度了一圈后也没发现有比较好的解释(或者你们对这个解释都很是清楚),因而本身经过代码和官方介绍了解它,进行了一些总结 给你们一些参考。python

 

首先咱们看官方的介绍是这样的:微信

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.this

 

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

 

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

 

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

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

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

 

咱们都知道建立线程有最经常使用的2个方法,分别利用thread和threading模块百度

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


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

 

那么咱们接下来看看利用threading模块建立的程序执行状况如何?


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

 

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

 

程序猿、工程师精彩分享

微信号:studypython

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

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

相关文章
相关标签/搜索