对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 相关文章推荐
Eclipse + Python 的安装与配置流程
Mar 05 Python
深入解析Python中的lambda表达式的用法
Aug 28 Python
python UNIX_TIMESTAMP时间处理方法分析
Apr 18 Python
requests和lxml实现爬虫的方法
Jun 11 Python
对pandas进行数据预处理的实例讲解
Apr 20 Python
对Python 文件夹遍历和文件查找的实例讲解
Apr 26 Python
django从请求到响应的过程深入讲解
Aug 01 Python
python 获取一个值在某个区间的指定倍数的值方法
Nov 12 Python
python使用SQLAlchemy操作MySQL
Jan 02 Python
Pytorch Tensor 输出为txt和mat格式方式
Jan 03 Python
python中四舍五入的正确打开方式
Jan 18 Python
python tkinter实现下载进度条及抖音视频去水印原理
Feb 07 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 curl模拟post请求小实例
2013/11/13 PHP
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
2019/10/16 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
2021/03/09 PHP
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
老鱼 浅谈javascript面向对象编程
2010/03/04 Javascript
jQuery数据显示插件整合实现代码
2011/10/24 Javascript
Extjs4 关于Store的一些操作(加载/回调/添加)
2013/04/18 Javascript
js跨域请求的5中解决方式
2015/07/02 Javascript
基于jQuery实现以手风琴方式展开和折叠导航菜单
2016/01/28 Javascript
JS正则表达式验证密码格式的集中情况总结
2017/02/23 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
AngularJS中table表格基本操作示例
2017/10/10 Javascript
手把手教你 CKEDITOR 4 扩展插件制作
2019/06/18 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
js 函数性能比较方法
2020/08/24 Javascript
对于Python的Django框架部署的一些建议
2015/04/09 Python
python抽象基类用法实例分析
2015/06/04 Python
基于进程内通讯的python聊天室实现方法
2015/06/28 Python
python读取与写入csv格式文件的示例代码
2017/12/16 Python
Python Tkinter图形工具使用方法及实例解析
2020/06/15 Python
pandas map(),apply(),applymap()区别解析
2021/02/24 Python
全球最大最受欢迎的旅游社区:Tripadvisor
2017/11/03 全球购物
介绍一下RMI的基本概念
2016/12/17 面试题
历史学专业推荐信
2013/11/06 职场文书
开办饭店创业计划书
2013/12/28 职场文书
高中课前三分钟演讲稿
2014/08/18 职场文书
平安建设汇报材料
2014/12/29 职场文书
个性发展自我评价2015
2015/03/09 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
2016年“我们的节日·清明节”活动总结
2016/04/01 职场文书
初中教务主任竞聘演讲稿(范文)
2019/08/20 职场文书
Golang: 内建容器的用法
2021/05/05 Golang
Python Matplotlib绘制条形图的全过程
2021/10/24 Python
继承Win10缺点!教你关闭Win11烦人的网络搜索
2021/11/23 数码科技
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL