对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程序中进行文件读取和写入操作的教程
Apr 28 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
Apr 24 Python
查看Django和flask版本的方法
May 14 Python
破解安装Pycharm的方法
Oct 19 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
Python动态语言与鸭子类型详解
Jul 01 Python
将tensorflow.Variable中的某些元素取出组成一个新的矩阵示例
Jan 04 Python
python下载卫星云图合成gif的方法示例
Feb 18 Python
python 如何用terminal输入参数
May 25 Python
整理Python中常用的conda命令操作
Jun 15 Python
Python何绘制带有背景色块的折线图
Apr 23 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
js cookies实现简单统计访问次数
2009/11/24 Javascript
jQuery 学习入门篇附实例代码
2010/03/16 Javascript
克隆javascript对象的三个方法小结
2011/01/12 Javascript
js查错流程归纳
2012/05/04 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
JavaScript实现同时调用多个函数的方法
2015/11/09 Javascript
基于vue实现分页/翻页组件paginator示例
2017/03/09 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
AngularJS中下拉框的高级用法示例
2017/10/11 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
解决webpack dev-server不能匹配post请求的问题
2018/08/24 Javascript
微信小程序Page中data数据操作和函数调用方法
2019/05/08 Javascript
JavaScript TAB栏切换效果的示例
2020/11/05 Javascript
[01:06:12]VP vs NIP 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[03:40]DOTA2抗疫特别篇《英雄年代》
2020/02/28 DOTA
django ObjectDoesNotExist 和 DoesNotExist的用法
2020/07/09 Python
python获取系统内存占用信息的实例方法
2020/07/17 Python
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
C语言怎样定义和声明全局变量和函数最好
2013/11/26 面试题
AJAX都有哪些有点和缺点
2012/11/03 面试题
司机辞职报告范文
2014/01/20 职场文书
财务信息服务专业自荐书范文
2014/02/08 职场文书
经理管理专业毕业自荐书范文
2014/02/12 职场文书
中学教师教育感言
2014/02/21 职场文书
机械专业求职信范文
2014/07/15 职场文书
党的群众路线教育实践活动剖析材料
2014/09/30 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
2014年保管员工作总结
2014/11/18 职场文书
护士年终考核评语
2014/12/31 职场文书
中秋节随笔
2015/08/15 职场文书
python 三边测量定位的实现代码
2021/04/22 Python
python正则表达式re.search()的基本使用教程
2021/05/21 Python
《火纹风花雪月无双》预告“神秘雇佣兵” 紫发剑客
2022/04/13 其他游戏
pytest实现多进程与多线程运行超好用的插件
2022/07/15 Python