对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操作列表的常用方法分享
Feb 13 Python
python通过zlib实现压缩与解压字符串的方法
Nov 19 Python
详解Python中expandtabs()方法的使用
May 18 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
Apr 27 Python
Python两台电脑实现TCP通信的方法示例
May 06 Python
使用Filter过滤python中的日志输出的实现方法
Jul 17 Python
Python 中 -m 的典型用法、原理解析与发展演变
Nov 11 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
完美解决keras 读取多个hdf5文件进行训练的问题
Jul 01 Python
python 基于opencv去除图片阴影
Jan 26 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
PHP利用imagick生成组合缩略图
2016/02/19 PHP
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
JavaScript之数组(Array)详解
2015/04/01 Javascript
深入理解JS addLoadEvent函数
2016/05/20 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
AngularJS使用ng-repeat指令实现下拉框
2016/08/23 Javascript
JavaScript每天必学之数组和对象部分
2016/09/17 Javascript
vue多级多选菜单组件开发
2020/09/08 Javascript
关于微信jssdk实现多图片上传的一点心得分享
2016/12/13 Javascript
js实现获取鼠标当前的位置
2016/12/14 Javascript
js 数据存储和DOM编程
2017/02/09 Javascript
浅谈node模块与npm包管理工具
2018/01/03 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
js制作提示框插件
2020/12/24 Javascript
Javascript实现打鼓效果
2021/01/29 Javascript
[04:48]DOTA2亚洲邀请赛林书豪为VGJ加油
2017/04/01 DOTA
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
Python中的is和==比较两个对象的两种方法
2017/09/06 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
python实现飞机大战微信小游戏
2020/03/21 Python
python for循环输入一个矩阵的实例
2018/11/14 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
python 第三方库paramiko的常用方式
2021/02/20 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
美体小铺加拿大官方网站:The Body Shop加拿大
2016/10/30 全球购物
德国富尔达运动鞋店:43einhalb
2020/12/25 全球购物
爱耳日宣传活动总结
2014/07/05 职场文书
四风对照检查材料范文
2014/09/27 职场文书
学校施工安全责任书
2015/01/29 职场文书
撤诉状格式范本
2015/05/19 职场文书
致青春观后感
2015/06/09 职场文书
MySQL中InnoDB存储引擎的锁的基本使用教程
2021/05/26 MySQL
MySQL为id选择合适的数据类型
2021/06/07 MySQL
Python OpenCV超详细讲解基本功能
2022/04/02 Python