做完工作这个进程就应该被销毁

单线程情况:

一个进程 ,默认有一个主线程 ,这个主线程执行完代码后 ,就应该自动销毁。然后进程也销毁。

多线程情况:

主线程代表进程结束

一个进程可以开多个线程,默认开启进程 ,首先开一个主线程 ,然后开子线程 ,主线程代码执行完毕后 ,也要等所有子线程 ,执行完毕后 ,再销毁 ,然后到进程销毁。

守护进程 要等主进程挂了后 守护进程才挂

1、对主进程来说,运行完毕指的是主进程代码运行完毕

2、对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕

主进程代码执行完后 ,守护进程就挂了

1、主进程在其代码结束后就已经算运行完毕了(守护进程在此时就被回收),然后主进程会一直等非守护的子进程都运行完毕后回收子进程的资源(否则会产生僵尸进程),才会结束,

2、主线程在其他非守护线程运行完毕后才算运行完毕(守护线程在此时就被回收)。因为主线程的结束意味着进程的结束,进程整体的资源都将被回收,
而进程必须保证非守护线程都运行完毕后才能结束。

守护线程守护着对象是主线程

守护线程盯着主线程 主线程一挂 守护线程就挂

总结 守护线程 ,就是等到进程内所有非守护线程运行完毕后 ,守护线程才销毁。

没有非守护线程 只有一个主线程情况下

开启守护线程方法一

t.setdaemon(True)

from threading import Thread
import time def sayhi(name):
time.sleep(2)
print('%s say hello' %name) if __name__ == '__main__':
t = Thread(target=sayhi,args=('子线程',))
t.setDaemon(True) # 必须在t.start()之前设置
t.start() print('主线程')
print(t.is_alive()) '''
主线程
True
'''

开启守护线程方法二

t.daemon = True

from threading import Thread
import time def sayhi(name):
time.sleep(2)
print('%s say hello' %name) if __name__ == '__main__':
t = Thread(target=sayhi,args=('子线程',))
t.daemon = True # 必须在t.start()之前设置
t.start() print('主线程')
print(t.is_alive()) '''
主线程
True
'''

子线程没有执行sayhi函数的代码,代表子线程已经死了

有非守护线程情况下

from threading import Thread
import time def foo():
print(123)
time.sleep(1)
print("end123") def bar():
print(456)
time.sleep(3)
print("end456") if __name__ == '__main__':
t1 = Thread(target=foo)
t2 = Thread(target=bar) t1.daemon = True
t1.start()
t2.start()
print("main-------")
# 非守护线程是t2 主线程 t1是守护线程
# 守护线程 等所有非守护线程执行完毕后 再销毁 '''
首先t1.start,t2.start 开启线程都是很快执行
所以打印123 然后t1 time.sleep ,打印t2的456 ,t2也time.sleep了,
然后打印主的消息 main 这种情况是 守护线程t1 在t2 执行最后一行代码前就死了 因为 t2 的time.sleep 3秒
t1 1秒 时间早就过了 所以t1先执行最后一行代码
''' '''
123
456
main-------
end123
end456
'''

python 并发编程 多线程 守护线程的更多相关文章

  1. 并发编程~~~多线程~~~守护线程, 互斥锁, 死锁现象与递归锁, 信号量 (Semaphore), GIL全局解释器锁

    一 守护线程 from threading import Thread import time def foo(): print(123) time.sleep(1) print('end123') ...

  2. python 并发编程 多线程 开启线程的两种方式

    一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...

  3. python 并发编程 多线程 目录

    线程理论 python 并发编程 多线程 开启线程的两种方式 python 并发编程 多线程与多进程的区别 python 并发编程 多线程 Thread对象的其他属性或方法 python 并发编程 多 ...

  4. python并发编程&多线程(二)

    前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...

  5. python并发编程&多线程(一)

    本篇理论居多,实际操作见:  python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一 ...

  6. Python并发编程——多线程与协程

    Pythpn并发编程--多线程与协程 目录 Pythpn并发编程--多线程与协程 1. 进程与线程 1.1 概念上 1.2 多进程与多线程--同时执行多个任务 2. 并发和并行 3. Python多线 ...

  7. python并发编程——多线程

    编程的乐趣在于让程序越来越快,这里将给大家介绍一个种加快程序运行的的编程方式--多线程   1 著名的全局解释锁(GIL) 说起python并发编程,就不得不说著名的全局解释锁(GIL)了.有兴趣的同 ...

  8. python 之 并发编程(守护线程与守护进程的区别、线程互斥锁、死锁现象与递归锁、信号量、GIL全局解释器锁)

    9.94 守护线程与守护进程的区别 1.对主进程来说,运行完毕指的是主进程代码运行完毕2.对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕​详细解释:1.主 ...

  9. Python 并发编程(一)之线程

    常用用法 t.is_alive() Python中线程会在一个单独的系统级别线程中执行(比如一个POSIX线程或者一个Windows线程)这些线程将由操作系统来全权管理.线程一旦启动,将独立执行直到目 ...

随机推荐

  1. 如何理解Hibernate的延迟加载机制?

    延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载.Hibernate使用了虚拟代理机制实现延迟加载.返回给用户的并不是实体本身,而是实体对象的代理.代理对象在用户调用getter方 ...

  2. react浏览器回退按钮的时候传递参数

    本来是有这个需求的,但是后来发现回退不也是到某个页面吗?接下来就使用了redux,真香啊,不管用户怎么操作,你到这个界面都给他一个值就完事了,没有就不给他这个值. 哈哈哈,公司框架使用umi.上代码 ...

  3. 24. ClustrixDB 持久性配置文件

    这些持久性选项不适用于内存中的表.有关更多信息,请参见内存表. ClustrixDB提供了一个选项,通过指定如何提交事务并使其持久,从而提高性能.当提交成功通知应用程序时,用户可以在提交过程中指定提交 ...

  4. zabbix微信发送消息脚本

    cat /usr/local/zabbix/share/zabbix/alertscripts/sed_messages_weixin.py python2.x #!/usr/bin/env pyth ...

  5. Apicloud_(项目)网上书城03_拓展模块实现

    Apicloud_(项目)网上书城01_前端页面开发 传送门 Apicloud_(项目)网上书城02_后端数据获取 传送门 Apicloud_(项目)网上书城03_拓展模块实现 传送门 实现商品详情页 ...

  6. 微信小程序_(组件)canvas画布

    canvas画布效果 官方文档:传送门 Page({ canvasIdErrorCallback: function (e) { console.error(e.detail.errMsg) }, o ...

  7. httpd如何卸载以及安装

    卸载 首先,要确认下是否有安装过,或者是系统自带了httpd服务,通过以下命令: # rpm -qa | grep httpd 或者: # yum list | grep httpd 我已经安装过一次 ...

  8. 数据聚类算法-K-means算法

    深入浅出K-Means算法 摘要: 在数据挖掘中,K-Means算法是一种 cluster analysis 的算法,其主要是来计算数据聚集的算法,主要通过不断地取离种子点最近均值的算法. K-Mea ...

  9. XMLHttpRequest 对象属性参数参考

    readyState:提供当前 HTML 的就绪状态. readyState可能返回的值: 0:请求未初始化(还没有调用 open()). 1:请求已经建立,但是还没有发送(还没有调用 send()) ...

  10. C# 查看计算机端口使用状态

    using System.Net.NetworkInformation; /// <summary> /// 获取第一个可用的端口号 /// </summary> /// &l ...