首页 > 其他分享 >守护线程

守护线程

时间:2024-05-29 12:33:17浏览次数:24  
标签:__ main task 线程 func print foo 守护

【一】主线程死亡,子线程未死亡

  • 主线程结束运行后不会马上结束,而是等待其他非守护子线程结束之后才会结束
  • 如果主线程死亡就代表者主进程也死亡,随之而来的是所有子线程的死亡
from threading import Thread
import time


def work(name):
    print(f'{name} is starting')
    time.sleep(2)
    print(f'{name} is ending')


def main():
    print('主进程开始了!')
    task = Thread(target=work, args=('ligo',))
    task.start()
    print('主进程结束了!')


if __name__ == '__main__':
    main()

    # 主进程开始了!
    # ligo is starting
    # 主进程结束了!
    # ligo is ending

【二】主进程死亡,子进程必死亡

from threading import Thread
import time


def work(name):
    print(f'{name} is starting')
    time.sleep(2)
    print(f'{name} is ending')


def main():
    print('主进程开始了!')
    task = Thread(target=work, args=('ligo',))
    # 开启守护线程 , 主线程结束,子线程随之结束
    task.daemon = True
    task.start()
    print('主进程结束了!')


if __name__ == '__main__':
    main()

    # 主进程开始了!
    # ligo is starting
    # 主进程结束了! 

【三】迷惑例子

# 导入所需模块
from threading import Thread
import time


# 定义函数foo,模拟一个耗时操作
def foo():
    # 打印开始信息
    print(f' this is foo begin')
    # 模拟耗时操作,暂停3秒
    time.sleep(3)
    # 打印结束信息
    print(f' this is foo end')


# 定义另一个函数func,同样模拟耗时操作
def func():
    # 打印开始信息
    print(f' this is func begin')
    # 模拟耗时操作,暂停1秒
    time.sleep(1)
    # 打印结束信息
    print(f' this is func end')


# 主函数
def main():
    # 创建线程 task_foo ,目标函数为foo
    task_foo = Thread(target=foo)
    # 设置 task_foo 为守护线程
    # 意味着当主线程结束时,不论 task_foo 是否执行完毕都会被强制终止
    task_foo.daemon = True
    # 创建线程 task_func ,目标函数为func
    task_func = Thread(target=func)

    # 启动线程 task_foo
    task_foo.start()
    # 启动线程 task_func
    task_func.start()

    # 主线程继续执行,打印以下信息
    print(f' this is main')


# 程序入口
if __name__ == '__main__':
    main()
    #  this is main begin 
    #  this is foo begin
    #  this is func begin
    #  this is main end
    #  this is func end

标签:__,main,task,线程,func,print,foo,守护
From: https://www.cnblogs.com/ligo6/p/18218360

相关文章

  • 线程的互斥锁
    【一】未加锁会产生的问题所有子线程都会进行阻塞操作,导致最后的改变只是改了一次fromthreadingimportThreadimporttimemoney=100deftask():globalmoney#模拟获取到车票信息temp=money#模拟网络延迟time.sleep(2)#模拟购票......
  • 多核通讯、线程通讯、进程通讯的区别
    多核通讯多核通讯通常指的是在多处理器系统中,不同核心之间的数据交换和协同工作。多核通讯的实现方式多种多样,包括但不限于高速缓存一致性协议、总线通信、交叉开关等。多核通讯的特点是高速率和低延迟,但实现起来较为复杂,需要硬件和操作系统层面的紧密合作。线程通讯线程通......
  • JAVAEE之线程多进阶(1)_常见的锁策略
    前言 在前面的线程初阶的内容中,我们已经简单介绍了锁,包括synchronized、volatile关键字(详细内容可见:https://blog.csdn.net/2301_80653026/article/details/138818637和https://blog.csdn.net/2301_80653026/article/details/138867371),我们在接下来要讲解的锁策略内容,对......
  • 线程概念浅谈
    1.为什么要有线程我们知道一个集成应用场景需要多个进程同时调度执行各自的功能,那么多进程的本质就是产生多个执行流,每个执行流执行不同的代码和功能,但是一个进程由PCB(task_struct)、进程地址空间、页表、文件描述符表等资源组成,是一个资源集合,创建的开销较大,那么为了满足用户的......
  • Java三种方法实现多线程,继承Thread类,实现Runnable接口,实现Callable接口
    目录线程:继承Thread类:实现Runnable类:实现Callable接口:验证多线程:线程:定义:进程可以同时执行多个任务,每个任务就是线程。举个例子:一个Java程序,如果同时有两个循环同时进行,就是线程。再比如,你用百度网盘,边看视频,边下载。继承Thread类:步骤写在代码里的classmythrea......
  • 如何进行接口优化?如何进行接口优化?多线程的核心参数有哪些?SpringCloud使用了哪些组件?
    在快速迭代的技术领域中,持续地回顾与总结项目经验不仅是个人成长的催化剂,也是智慧积累的关键环节,本次知识积累旨在深入剖析如何进行接口优化?如何进行接口优化?多线程的核心参数有哪些?SpringCloud使用了哪些组件?一、如何优化SQL?优化SQL语句以提高查询效率和性能是一项......
  • Java高并发编程详解:深入理解并发核心库(Java高并发编程详解:多线程与架构设计姊妹篇) (Ja
    我的阅读笔记:并发核心库概览:首先介绍Java并发核心库的组成,包括java.util.concurrent包下的主要类和接口,以及它们之间的关系。线程池技术:详细讲解Java中的线程池技术,包括线程池的创建、配置、使用以及调优。介绍不同类型的线程池(如FixedThreadPool、CachedThreadPool等)以及它们......
  • 29.并发编制【六】守护线程与锁
    【一】守护线程守护线程是在后台运行并依赖于主线程或非守护线程的存在1)主线程死亡,子线程存活主线程结束后不会立马结束,而是等待其他子线程结束之后结束fromthreadingimportThreadimporttimedefwork(name):print(f'{name}开始')time.sleep(2)print(f......
  • 28.并发编制【五】管道与多线程
    【一】管道1)介绍frommultiprocessingimportPipe#创建管道left_pipe,right_pipe=Pipe()#返回管道两端的连接对象,需在产生Process对象之前产生管道#默认参数dumplex:默认管道是全双工的#若为False,left_pipe只能用于接收,right_pipe只能用于发送2)主要方法#接收数......
  • 守护进程
    【一】什么是守护进程守护进程是在计算机系统启动时就已经运行,并且一直在后台运行的一类特殊进程。特殊在只要系统不关机,就会一直存在守护进程往往是由系统管理员手动启动的,它们可以在系统启动时自动启动,一直运行在后台,直到系统关闭或被停止常见的守护进程包括网络服务(如w......