python的Threading模块中thread对象在创建时参数daemon有什么作用?

先介绍一下,Threading是Python中基于thread模块的高级模块,就是用来创建线程的模块。
具体解释,可以进入Python官网查看:
官网Threading介绍页面
言归正传,如果我们在python中想要创建一个线程,那么可以这么写:

import Threading
#function是我们自己定义的函数,当thread开始执行的时候,就会运行我们自己定义的这个函数
thread = Threading.thread(target=function)

举个例子:(注意看红框框起来的输出部分,对比后面设置了daemon参数的输出与这里的输出的不同)
在这里插入图片描述

import threading
import time
def test():
        print("子线程开始,主线程还没有结束呢\n")
        time.sleep(2)
        print("子线程还在呢,主线程已经结束了")

traffic = threading.Thread(target=test)
traffic.start()
print("主线程结束了")

如上述函数,traffic(Thread对象的一个实例)在start之后,开始执行target对应的函数:test
如上面所述截图所示,当我们创建的子线程在我们主线程结束后,他仍然在执行。
但如果我们的逻辑是:当主线程结束后,由这个主线程创建的所有的子线程也要全部结束,我们该怎么办呢?
当当当~~~~♪(^ ∇^*)那就到我们讲的Thread对象中的daemon参数隆重登场了!!
(daemon线程他也被称为“守护线程”)
这次,我先在上面的例子的基础上,在创建Thread对象时同时设置daemon参数,再对比看看效果。
在这里插入图片描述

import threading
import time
def test():
        print("子线程开始,主线程还没有结束呢\n")
        time.sleep(2)
        print("子线程还在呢,主线程已经结束了")
#在下面这行加上了 ,daemon=True
traffic = threading.Thread(target=test,daemon=True)
traffic.start()
print("主线程结束了")

上下对比,可以看出,当Thread对象上设置参数daemon=True时,这个时候当主线程结束后,由他创建的子线程也已经自动结束了。

再上官网,看官网的对于daemon的说明,官网Threading介绍页面

  1. 首先是关于daemon的意义:
    在这里插入图片描述
    简单引述其中最重要的一句:当程序中仅剩下“daemon=True”的线程对象时,则整个Python程序也会退出,这就是daemon这个参数的意义。
    大白话的意思就是,当其他线程都结束了,被设置成“daemon=True”的线程也跟着一起结束。
  2. 其次是daemon参数的设置
    在这里插入图片描述
    daemon必须设置在线程对象执行start之前,否则会生成“RuntimeError”错误。他的初始值继承自创建他的线程;主线程不是一个daemon线程因此由主线程创建的全部线程默认daemon=False

总结:如果自己想要让由主线程创建的子线程随着主线程结束而结束,则在创建线程时加上“daemon=True”这个设置;反之,则不加。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值