对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中的Cookie模块使用
Jul 06 Python
基python实现多线程网页爬虫
Sep 06 Python
python控制台中实现进度条功能
Nov 10 Python
python查看微信好友是否删除自己
Dec 19 Python
python实现csv格式文件转为asc格式文件的方法
Mar 23 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
Nov 06 Python
Python实现将多个空格换为一个空格.md的方法
Dec 20 Python
Django--权限Permissions的例子
Aug 28 Python
哪种Python框架适合你?简单介绍几种主流Python框架
Aug 04 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 Python
Pytorch 如何加速Dataloader提升数据读取速度
May 28 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
phpExcel导出大量数据出现内存溢出错误的解决方法
2013/02/28 PHP
执行、获取远程代码返回:file_get_contents 超时处理的问题详解
2013/06/25 PHP
php 使用curl模拟ip和来源进行访问的实现方法
2017/05/02 PHP
javascript Prototype 对象扩展
2009/05/15 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
使用js操作cookie的一点小收获分享
2013/09/03 Javascript
jQuery实现感应鼠标动画效果自动伸长的输入框实例
2015/02/24 Javascript
jQuery实现TAB风格的全国省份城市滑动切换效果代码
2015/08/24 Javascript
三个js循环的关键字示例(for与while)
2016/02/16 Javascript
JS查找字符串中出现次数最多的字符
2016/09/05 Javascript
微信小程序日历组件calendar详解及实例
2017/06/08 Javascript
VUE中使用MUI方法
2019/02/12 Javascript
Vue使用localStorage存储数据的方法
2019/05/27 Javascript
安装多版本Vue-CLI的实现方法
2020/03/24 Javascript
用Python的urllib库提交WEB表单
2009/02/24 Python
利用Python的装饰器解决Bottle框架中用户验证问题
2015/04/24 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
使用Pytorch来拟合函数方式
2020/01/14 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
2020/03/10 Python
pytorch加载自己的图像数据集实例
2020/07/07 Python
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
Made in Design英国:设计家具、照明、家庭装饰和花园家具
2019/09/24 全球购物
UNIX文件名称有什么规定
2013/03/25 面试题
集体备课反思
2014/02/12 职场文书
会计专业导师推荐信
2014/03/08 职场文书
专业技术职务聘任书
2014/03/29 职场文书
超市客服工作职责
2014/06/11 职场文书
村创先争优活动总结
2014/08/28 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
2015年卫生监督工作总结
2015/05/21 职场文书
公司回复函格式
2015/07/14 职场文书
2015年中秋节主持词
2015/07/30 职场文书
六种css3实现的边框过渡效果
2021/04/22 HTML / CSS
Python类方法总结讲解
2021/07/26 Python
python index() 与 rindex() 方法的使用示例详解
2022/12/24 Python