首页 > 其他分享 >11月1日守护线程

11月1日守护线程

时间:2023-11-01 16:24:21浏览次数:40  
标签:11 __ 结束 主线 线程 print 守护

目录

守护线程

守护线程核心就是守护到整个进程运行周期结束

什么是进程的运行周期呢?

进程的运行周期通常以循环的方式重复进行,从就绪状态到运行状态再到阻塞状态,然后再次切换到就绪状态。这个循环持续进行,一直到进程结束。

第一种情况只有主线程和守护线程的情况

这个情况就是为了测试守护线程是否和守护进程一样,当主线程结束守护线程是否会结束

代码

# 守护线程,守护的是进程的运行周期

from threading import Thread, enumerate
import time

def task():
    print('守护线程开始')
    time.sleep(10)
    print('守护线程结束')


if __name__ == '__main__':
    t = Thread(target=task)
    t.daemon = True#这里将t这个线程变成守护线程
    t.start()
    print('主')

结果如图

结果证明了主线程结束,子线程也会立刻停止运行

第二种情况有主线程、子线程以及守护线程的情况

现在要证明的是在主线程完成后,子线程还在运行时守护线程会不会随着主线程结束

代码

from threading import Thread, enumerate
import time

def task():
    print('守护线程开始')
    time.sleep(3)#这里让守护线程睡眠3秒,这个期间让主线程结束掉然后看看守护线程会不会结束
    print('守护线程结束')


def task2():
    print('子线程start')
    time.sleep(4)#这里让子线程比守护线程多睡眠一秒确保这个时间里面守护线程结束
    print('子线程end')

if __name__ == '__main__':
    t = Thread(target=task)
    t2 = Thread(target=task2)

    t.daemon = True#这里将t这个线程变成守护线程
    t2.start()

    t.start()
    print('主')

结果如下

结果图就说明了当有子线程时,主线程结束了守护线程不会结束,如果守护线程比子线程多睡眠一秒它就会因为子线程结束而结束

总结

守护线程的结束条件是整个进程运行周期结束

现在以生活为例子

假设我有一个餐厅(代表一个进程),里面有一个服务员(代表一个守护线程),然后有餐厅老板(代表一个主线程),以及顾客(子线程)

进程(餐厅):它运行着并提供服务,主线程(餐厅老板)负责管理餐厅的整体运营。老板负责开店、关店以及处理一些餐厅运营相关的任务。子线程(服务员)负责接受客户的点餐以及上菜,如果主线程(老板)有事离开,但是它让守护线程(服务员)等子线程(顾客)结束了把门关了,守护线程(服务员)可以等待子线程(顾客)结束了把门关了,也可以比顾客先走,取决于它的工作时间。

在这个例子中,服务员线程是一个守护线程,它等待接受顾客的点餐请求,但当餐厅关闭时,服务员也会关闭。主线程(餐厅老板)管理餐厅的整体运营,可以随时开店、关闭店以及执行其他任务。但是当主线程(餐厅老板)提前离去,顾客没有走服务员就有可能要等待顾客走了再走,也可以比顾客先走取决于它的工作时间。

标签:11,__,结束,主线,线程,print,守护
From: https://www.cnblogs.com/slzjb/p/17803408.html

相关文章

  • Ableton Live 11 Suite:Mac上最顶级的音乐制作神器
    AbletonLive11Suite是一款备受赞誉的音乐制作软件,它为Mac用户带来了前所未有的音乐制作体验。这款卓越的软件不仅具备直观的界面和卓越的音频编辑功能,还集成了众多其他令人惊叹的功能,为用户提供了从构思到发行的全方位音乐制作服务。→→↓↓载AbletonLive11SuiteMac版Ab......
  • Opencv中goodFeaturesToTrack函数(Harris角点、Shi-Tomasi角点检测)算子速度的进一步
    搜索到某个效果很好的视频去燥的算法,感觉效果比较牛逼,就是速度比较慢,如果能做到实时,那还是很有实用价值的。于是盲目的选择了这个课题,遇到的第一个函数就是角点检测,大概六七年用过C#实现过Harris角点以及SUSAN角点。因此相关的理论还是有所了解的,不过那个时候重点在于实现,对于......
  • Java 线程池详解,图文并茂,还有谁不会?!
    来源:blog.csdn.net/mu_wind/article/details/113806680初识线程池我们知道,线程的创建和销毁都需要映射到操作系统,因此其代价是比较高昂的。出于避免频繁创建、销毁线程以及方便线程管理的需要,线程池应运而生。线程池优势降低资源消耗:线程池通常会维护一些线程(数量为corePool......
  • 11.1学习总结
    importjava.io.FileWriter;importjava.io.IOException;importjava.util.HashSet;importjava.util.Random;importjava.util.Scanner;importjava.util.Set;publicclassMathExerciseGenerator{publicstaticvoidmain(String[]args){intnumExercises=......
  • c# Dictionary 字典与线程安全字典的基本使用
    在C#中,字典(Dictionary)是一种特殊的集合,用于存储键/值对。这是一种关联数组,其中每个元素都包含一个键(Key)和一个值(Value)。下面是一个简单的C#字典的例子://字典:泛型;key-value,增删查改都很快;//字典如果数据量太大的话,也会影响效率.//字典......
  • Windows 11 version 23H2 中文版、英文版 (x64、ARM64) 下载 (released Oct 2023)
    Windows11version23H2中文版、英文版(x64、ARM64)下载(releasedOct2023)Windows11,version23H2,2023年10月31日发布请访问原文链接:https://sysin.org/blog/windows-11/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org全新Windows体验,让您与热爱的人......
  • 2023年11月Java面试常见问题
    1.jvm内存模型https://baijiahao.baidu.com/s?id=1709435405507347362&wfr=spider&for=pchttps://baijiahao.baidu.com/s?id=1722629637623477825&wfr=spider&for=pc2.GCROOT都包含什么https://worktile.com/kb/p/37469https://blog.csdn.net/jjclove/article/deta......
  • 11月3号晚上测试题解
    3954ProblemA变量交换输出#include<stdio.h>intmain(){inta,b,c,x;scanf("%d%d%d",&a,&b,&c);//假设a,b,c分别为1,2,3;选择一个中间值进行数值替换x=a;//把a赋值给x,此时x就等于a的值为1a=c;//把c赋值给a,此时a就等于c的值为3c=b;//把b赋......
  • Windows11 操作系统 SysWOW64 文件夹的作用
    Windows11操作系统中的SysWOW64文件夹是一个重要的系统目录,它在某些方面扮演着特殊的角色。在这篇文章中,我将详细介绍SysWOW64文件夹的作用,并举例说明它在操作系统中的具体应用。首先,让我们了解一下该文件夹的背景和目的。SysWOW64文件夹是Windows64位操作系统中的一个关......
  • 11-1
    1、CSV以纯文本形式存储数字和文本数据,以换行符间隔多条记录2、软件实现数据持久性的最基本途径是文件和数据库3、影响应用程序选择数据的存储、管理和处理方式的因素包括共享与传输、数据的持久性和使用频次、数据的量及管理、数据的操作方式4、Java字节流操作的基础类是Outpu......