python 并发编程 多线程 守护线程
做完工作这个进程就应该被销毁
单线程情况:
一个进程 ,默认有一个主线程 ,这个主线程执行完代码后 ,就应该自动销毁。然后进程也销毁。
多线程情况:
主线程代表进程结束
一个进程可以开多个线程,默认开启进程 ,首先开一个主线程 ,然后开子线程 ,主线程代码执行完毕后 ,也要等所有子线程 ,执行完毕后 ,再销毁 ,然后到进程销毁。
守护进程 要等主进程挂了后 守护进程才挂
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 并发编程 多线程 守护线程的更多相关文章
- 并发编程~~~多线程~~~守护线程, 互斥锁, 死锁现象与递归锁, 信号量 (Semaphore), GIL全局解释器锁
一 守护线程 from threading import Thread import time def foo(): print(123) time.sleep(1) print('end123') ...
- python 并发编程 多线程 开启线程的两种方式
一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 二 开启线程的两种方式 第一种 每造一个进程,默认有一个线程,就是 ...
- python 并发编程 多线程 目录
线程理论 python 并发编程 多线程 开启线程的两种方式 python 并发编程 多线程与多进程的区别 python 并发编程 多线程 Thread对象的其他属性或方法 python 并发编程 多 ...
- python并发编程&多线程(二)
前导理论知识见:python并发编程&多线程(一) 一 threading模块介绍 multiprocess模块的完全模仿了threading模块的接口,二者在使用层面,有很大的相似性 官网链 ...
- python并发编程&多线程(一)
本篇理论居多,实际操作见: python并发编程&多线程(二) 一 什么是线程 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一 ...
- Python并发编程——多线程与协程
Pythpn并发编程--多线程与协程 目录 Pythpn并发编程--多线程与协程 1. 进程与线程 1.1 概念上 1.2 多进程与多线程--同时执行多个任务 2. 并发和并行 3. Python多线 ...
- python并发编程——多线程
编程的乐趣在于让程序越来越快,这里将给大家介绍一个种加快程序运行的的编程方式--多线程 1 著名的全局解释锁(GIL) 说起python并发编程,就不得不说著名的全局解释锁(GIL)了.有兴趣的同 ...
- python 之 并发编程(守护线程与守护进程的区别、线程互斥锁、死锁现象与递归锁、信号量、GIL全局解释器锁)
9.94 守护线程与守护进程的区别 1.对主进程来说,运行完毕指的是主进程代码运行完毕2.对主线程来说,运行完毕指的是主线程所在的进程内所有非守护线程统统运行完毕,主线程才算运行完毕详细解释:1.主 ...
- Python 并发编程(一)之线程
常用用法 t.is_alive() Python中线程会在一个单独的系统级别线程中执行(比如一个POSIX线程或者一个Windows线程)这些线程将由操作系统来全权管理.线程一旦启动,将独立执行直到目 ...
随机推荐
- js 设置多条css样式
如果在一个网页中给id="mydiv"的元素添加css样式,先获取该节点:var obj = document.getElementById("mydiv"); ...
- MAC下安装Homebrew和GDB,并解决无法调试问题
Homebrew官网 http://brew.sh/index_zh-cn.html Homebrew是神马 linux系统有个让人蛋疼的通病,软件包依赖,好在当前主流的两大发行版本都自带了解决方案, ...
- SQL中Charindex和Oracle中对应的函数Instr
转:http://blog.csdn.net/zhuyu19911016520/article/details/8568640 sql :charindex('字符串',字段)>0 charin ...
- Spring后台,通过name取值
表单中,有同名控件(text/hidden/checkbox.......)的情况下,采用getParameterValues("name"):String[] 表单中,只有一个n ...
- CF 354 D 迷宫与门的旋转 BFS +状态压缩 一定要回头看看
D. Theseus and labyrinth time limit per test 3 seconds memory limit per test 256 megabytes input sta ...
- css实现动态阴影、蚀刻文本、渐变文本
css实现动态阴影 创建与类似的阴影box-shadow 而是基于元素本身的颜色. 代码实现: <div class="dynamic-shadow-parent"> ...
- 基于dubbo的分布式系统(一)安装docker
1.安装过程参考: #uname -r 查看内核是否高于3.10 #sudo yum update root权限登陆确保yum包最新 #sudo yum remove docker docker-c ...
- 非对称加密算法DH
特点: 发送方和接收方均有一个密钥对(公钥+私钥),其中公钥传播,私钥自己保存,不需要传播 私钥不需要传播的特性解决了对称加密算法中密钥传播的困难(这个困难一般通过线下传递可以解决) 加密安全性极高, ...
- 笔记本电脑如何同时上内外网(通过usb外接网卡实现虚拟机连外网)
我们这里达成的方式不是内外网切换,而是真正意义上的同时上内网和外网 原理: 通过构建虚拟机,利用usb外接网卡(某宝某东都有售,价格在50大洋左右)使虚机连接外网,然后开启虚拟机的unity模式 准备 ...
- 后盾网lavarel视频项目---vue实现动态添加和删除板块
后盾网lavarel视频项目---vue实现动态添加和删除板块 一.总结 一句话总结: 原理就是:列表时根据vue中的videos变量中的元素来遍历的,初始时videos:[{title:'',pat ...