全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

Python线程为什么搞个setDaemon?

发布时间:2023-10-11 17:51:05
发布人:xqq

一、Python线程为什么搞个setDaemon

当启动一个线程时设置thread.setDaemon(True),则该线程为守护线程(也可以称为后台线程)。表示该线程是不重要的,进程退出时不需要等待这个线程执行完成。这样做的意义在于:避免子线程无限死循环,导致退不出程序,也就是避免了孤儿进程的出现。

当不设置或者thread.setDaemon(False)时,主进程执行结束时,会等待线程结束。

应用:如保持网络连接(发送keep-alive心跳包)或者后台监控的线程,负责内存管理与垃圾回收(实际上JVM就是这样做的),这些线程与实际提供应用服务的线程有了逻辑上的”前/后”的概念,而如果主线程已经退出,那么这些后台线程也没有存在的必要。
如果没有这一机制,那么我们在主线程完成之后,还必须逐个地检查后台线程,然后在主线程退出之前,逐个地关闭它们. 有了前后线程的区分, 我们只需要负责管理前台线程, 完成主要的逻辑处理之后退出即可。

当子线程不设置时,主进程结束后,子线程会继续执行完后,程序结束。

import time

from hashlib import md5

from threading import Thread

def pmd(md):

    time.sleep(3) #使用sleep使得该线程比主线程晚结束

    print(“backend recording:”,md)

def giveures(s):

    md = md5(s.encode(‘utf-8’))

    res = md.digest()

    t = Thread(target=pmd,args=(s,))

    #t.setDaemon(True) 默认情况:t.setDaemon(False)

    t.start()

    return res

s = ‘chrisyang’

res = giveures(s)

print(res)

当设置时,主进程不会等待子线程,当主线程结束,子线程就会被强制停止运行并回收。

import time

from hashlib import md5

from threading import Thread

def pmd(md):

    time.sleep(3) #使用sleep使得该线程比主线程晚结束

    print(“backend recording:”,md)

def giveures(s):

    md = md5(s.encode(‘utf-8’))

    res = md.digest()

    t = Thread(target=pmd,args=(s,))

    t.setDaemon(True)

    t.start()

    return res

s = ‘chrisyang’

res = giveures(s)

print(res)


延伸阅读:

二、异步消息队列

说道消息队列,你肯定会想到Kafka、Rabbitmq等消息中间件,这些专业的消息中间件提供了很多功能特性,当然他的部署使用维护都是比较麻烦的。如果你对消息队列没那么高要求,想要轻量级的,使用Redis就没错啦。

Redis通过list数据结构来实现消息队列.主要使用到如下命令:

lpush和rpush入队列lpop和rpop出队列blpop和brpop阻塞式出队列
#it技术干货

相关文章

Linux I/O复用中select poll epoll模型的介绍及其优缺点?

Linux I/O复用中select poll epoll模型的介绍及其优缺点?

2023-10-11
app启动页和引导页的区别?

app启动页和引导页的区别?

2023-10-11
Java中equals和==的区别?

Java中equals和==的区别?

2023-10-11
python的dict和json数据有什么区别?

python的dict和json数据有什么区别?

2023-10-11

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取