Python多线程join和setDaemon区别与用法
一直没有太搞清楚join和setDaemon有什么区别,总是对于它们两个的概念很模糊,需要做个实验然后记录一下。
先说结论:
join: 子线程合并到主线程上来的作用,就是当主线程中有子线程join的地方,那主线程就在此等改子线程执行完毕再执行主线程后续的语句。那如果没有join主线程就一直自己执行到底。
setDaemon: 主线程销毁子线程要不要根主线程一起销毁,False就是不一起销毁,也就是意味着主线程执行完毕,子线程还在自顾自的执行,而True就是一起销毁主线程结束,子线程也结束。
通俗点说就是,join的意思是子线程告诉主线程,你要在这个位置(设置join的位置)等我执行完毕你再往下执行;setDaemon则是设置主线程死的时候要不要带子线程一起。
实验如下:
- 我们看看加join和不加join
#!/usr/bin/env python
#-*- coding:utf8 -*-
import threading
import time
def test_fun(n):
for i in range(n):
print i
time.sleep(1)
# test join
t = threading.Thread(target=test_fun, args=(5,), name="t1")
t.setDaemon(True)
t.start()
print "lets join"
t.join()
print "END"
不注释t.join()程序输出如下:
0
lets join
1
2
3
4
END
注释t.join()程序输出如下:
0
END
可以看出不注释的时候主线程不等子线程执行完毕,自己就退出了。
- 在看setDaemon为True和False的情况
#!/usr/bin/env python
#-*- coding:utf8 -*-
import threading
import time
def test_fun(n):
for i in range(n):
print i
time.sleep(1)
print "SUB END"
# test setDaemon
t = threading.Thread(target=test_fun, args=(5,), name="t1")
t.setDaemon(False)
t.start()
print "MAIN END"
为False的时候输出结果如下:
0MAIN END
1
2
3
4
SUB END
可以看出主线程结束了,子线程没有跟着一起死
为True的时候输出结果如下:
0MAIN END
可以看出主线程死了,子线程就不执行了跟着死了
Python多线程join和setDaemon区别与用法的更多相关文章
- 彻底理解Python多线程中的setDaemon与join【配有GIF示意】
在进行Python多线程编程时, join() 和 setDaemon() 是最常用的方法,下面说说两者的用法和区别. 1.join () 例子:主线程A中,创建了子线程B,并且在主线程A中调用了B. ...
- python多线程与多进程及其区别
个人一直觉得对学习任何知识而言,概念是相当重要的.掌握了概念和原理,细节可以留给实践去推敲.掌握的关键在于理解,通过具体的实例和实际操作来感性的体会概念和原理可以起到很好的效果.本文通过一些具体的例子 ...
- Python多线程join/setDaemon
import threading, time class Test(): def test1(self): print("--") time.sleep(3) print(&quo ...
- Python多线程join的用法
import threading, time def Myjoin(): print 'hello world!' time.sleep(1) for i in range(5): t=threadi ...
- python 多线程和多进程的区别 mutiprocessing theading
多线程可以共享全局变量,多进程不能.多线程中,所有子线程的进程号相同:多进程中,不同的子进程进程号不同. #!/usr/bin/python # -*- coding:utf-8 -*- import ...
- 20.多线程.join()和setDaemon()的使用
1.join()方法 join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这 ...
- python多线程与多进程的区别
在UNIX平台上,当某个进程终结之后,该进程需要被其父进程调用wait,否则进程成为僵尸进程(Zombie).所以,有必要对每个Process对象调用join()方法 (实际上等同于wait).对于多 ...
- python面试题之python多线程与多进程的区别
多线程可以共享全局变量,多进程不能 多线程中,所有子线程的进程号相同,多进程中,不同的子进程进程号不同 线程共享内存空间:进程的内存是独立的 同一个进程的线程之间可以直接交流:两个进程想通信,必须通过 ...
- Python线程join和setDaemon
看一下线程的setDaemon()方法 import time import threading import ctypes import inspect def sayHello(): for i ...
随机推荐
- 校招“避雷针”——GitHub 热点速览 Vol.43
作者:HelloGitHub-小鱼干 如果要选一个关键词来概述本周的 GitHub Trending,保护 便是不二之选.先是有 ShameCom 来为应届毕业生护航,让学弟学妹们不被黑名单上的公司上 ...
- HBase基础理论知识
来源:第四章:大数据 の HBase 基础 本课主题 NoSQL 数据库介绍 HBase 基本操作 HBase 集群架构与设计介紹 HBase 与HDFS的关系 HBase 数据拆分和紧缩 引言 ...
- 博客主题——cnbook
主题预览 主题下载 gshang.cnbook.rar version:2020-05-29 gshang.cnbook@2.0.rar version:2020-08-25 .source-down ...
- VMware Workstation Pro 虚拟机安装
1.简介 虚拟机指通过软件莫比的具体有完整硬件系统功能的.运行在一个完全隔离环境中的完整计算机系统. 我们可以通过虚拟机软件,可以在一台物理计算机模拟出一台或多台虚拟的计算机,这些虚拟的计算机完全就像 ...
- presto 查询每天固定时间段
select task_id,state,createymd,from_unixtime(createtime) "创建时间",manager_name,open_state,ho ...
- 「补课」进行时:设计模式(5)——从 LOL 中学习代理模式
1. 前文汇总 「补课」进行时:设计模式系列 2. 从 LOL 中学习代理模式 我是一个很喜欢玩游戏的人,虽然平时玩游戏的时间并不多,但我也是一个忠实的 LOL 的爱好者,就是段位有点惨不忍睹,常年倔 ...
- Java SFTP 上传、下载等操作
Java SFTP 上传.下载等操作 实际开发中用到了 SFTP 用于交换批量数据文件,然后琢磨了下这方面的东西,基于 JSch 写了个工具类记录下,便于日后使用. JSch是 SSH2 的纯Java ...
- 深入探究ASP.NET Core Startup初始化
前言 Startup类相信大家都比较熟悉,在我们使用ASP.NET Core开发过程中经常用到的类,我们通常使用它进行IOC服务注册,配置中间件信息等.虽然它不是必须的,但是将这些操作统一在Start ...
- git 出现 error: bad signature fatal: index file corrupt
一次大改版,提交了很多代码,但再次提交提交不了,也拉不下来仓库的代码 提示error bad signature fatal: index file corrupt 在项目有.git这同级打开Git ...
- mysql数据库——选择优化的数据类型
选择更小的数据类型:一般情况下,应该尽量使用可以正确存储数据的最小数据类型.更小的数据类型通常更快,它们占用更少的磁盘.内存和CPU缓存,并且处理时需要的CPU周期也更少.但是要确保没有低估需要存储的 ...