对python 多线程中的守护线程与join的用法详解


Posted in Python onFebruary 18, 2019

多线程:在同一个时间做多件事

守护线程:如果在程序中将子线程设置为守护线程,则该子线程会在主线程结束时自动退出,设置方式为thread.setDaemon(True),要在thread.start()之前设置,默认是false的,也就是主线程结束时,子线程依然在执行。

thread.join():在子线程完成运行之前,该子线程的父线程(一般就是主线程)将一直存在,也就是被阻塞

实例:

#!/usr/bin/python
# encoding: utf-8
 
 
import threading
from time import ctime,sleep
 
def func1():
 count=0
 while(True):
  sleep(1)
  print 'fun1 ',count
  count = count+1
 
def func2():
 count=0
 while(True):
  sleep(2)
  print 'fun2 ',count
  count = count+1
 
threads = []
t1 = threading.Thread(target=func1)
threads.append(t1)
t2 = threading.Thread(target=func2)
threads.append(t2)
 
if __name__ == '__main__':
 for t in threads:
  t.setDaemon(True)
  t.start()

上面这段程序执行后,将不会有任何输出,因为子线程还没来得及执行,主线程就退出了,子线程为守护线程,所以也就退出了。

修改后的程序:

#!/usr/bin/python
# encoding: utf-8
 
 
import threading
from time import ctime,sleep
 
def func1():
 count=0
 while(True):
  sleep(1)
  print 'fun1 '+str(count)
  count = count+1
 
def func2():
 count=0
 while(True):
  sleep(2)
  print 'fun2 '+str(count)
  count = count+1
 
threads = []
t1 = threading.Thread(target=func1)
threads.append(t1)
t2 = threading.Thread(target=func2)
threads.append(t2)
 
if __name__ == '__main__':
 for t in threads:
  t.setDaemon(True)
  t.start()
 t.join()

可以按照预期执行了,主要join的调用要加在循环外,不然程序只会执行第一个线程。

print 的部分改成+,是为了避免输出结果中出现类似fun1 fun2 49 这种情况,这是由于程序执行太快,用‘,'间隔相当于执行了两次print ,在这期间另一个线程也执行了print,所以导致了重叠。

以上这篇对python 多线程中的守护线程与join的用法详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python CSV模块使用实例
Apr 09 Python
Python虚拟环境Virtualenv使用教程
May 18 Python
利用python爬取散文网的文章实例教程
Jun 18 Python
Python之ReportLab绘制条形码和二维码的实例
Jan 15 Python
python做量化投资系列之比特币初始配置
Jan 23 Python
Python实现读取txt文件并转换为excel的方法示例
May 17 Python
解决pyinstaller打包pyqt5的问题
Jan 08 Python
使用Django连接Mysql数据库步骤
Jan 15 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
Jun 04 Python
python模块导入的方法
Oct 24 Python
python实现小世界网络生成
Nov 21 Python
利用python实现平稳时间序列的建模方式
Jun 03 Python
python 多线程重启方法
Feb 18 #Python
解决Python中定时任务线程无法自动退出的问题
Feb 18 #Python
将string类型的数据类型转换为spark rdd时报错的解决方法
Feb 18 #Python
对Python3使运行暂停的方法详解
Feb 18 #Python
解决python线程卡死的问题
Feb 18 #Python
Python中时间datetime的处理与转换用法总结
Feb 18 #Python
对python中的try、except、finally 执行顺序详解
Feb 18 #Python
You might like
图书管理程序(一)
2006/10/09 PHP
MayFish PHP的MVC架构的开发框架
2009/08/13 PHP
PHP实现的随机IP函数【国内IP段】
2016/07/20 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
PHP中类型转换 ,常量,系统常量,魔术常量的详解
2017/10/26 PHP
jQuery 源码分析笔记(5) jQuery.support
2011/06/19 Javascript
js加强的经典分页实例
2013/03/15 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
2014/03/22 Javascript
jQuery多媒体插件jQuery Media Plugin使用详解
2014/12/19 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
JavaScript通过setTimeout实时显示当前时间的方法
2015/04/16 Javascript
javascript实现获取字符串hash值
2015/05/10 Javascript
C++中的string类的用法小结
2015/08/07 Javascript
JS实现的5级联动Select下拉选择框实例
2015/08/17 Javascript
js实现表单Radio切换效果的方法
2015/08/17 Javascript
利用jQuery中的ajax分页实现代码
2016/02/25 Javascript
javascript中使用未定义变量或值的情况分析
2016/07/19 Javascript
原生JS实现首页进度加载动画
2016/09/14 Javascript
浅谈jQuery中的$.extend方法来扩展JSON对象
2017/02/12 Javascript
JavaScript实现计算圆周率到小数点后100位的方法示例
2018/05/08 Javascript
Vue实现商品详情页的评价列表功能
2019/09/04 Javascript
vue中组件通信详解(父子组件, 爷孙组件, 兄弟组件)
2020/07/27 Javascript
[06:59]DOTA2-DPC中国联赛3月7日Recap集锦
2021/03/11 DOTA
phpsir 开发 一个检测百度关键字网站排名的python 程序
2009/09/17 Python
使用python编写简单的小程序编译成exe跑在win10上
2018/01/15 Python
python 构造三维全零数组的方法
2018/11/12 Python
用python生成(动态彩色)二维码的方法(使用myqr库实现)
2019/06/24 Python
Python随机函数库random的使用方法详解
2019/08/21 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
2020/04/08 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
2020/05/26 Python
表演方阵解说词
2014/02/08 职场文书
家长评语和期望
2014/02/10 职场文书
求职信怎么写
2014/05/23 职场文书
考研英语复习计划
2015/01/19 职场文书
MySQL深度分页(千万级数据量如何快速分页)
2021/07/25 MySQL