对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的Django框架中的模版相关知识
Jul 15 Python
python实现按行切分文本文件的方法
Apr 18 Python
Python读csv文件去掉一列后再写入新的文件实例
Dec 28 Python
Python解决八皇后问题示例
Apr 22 Python
Python数据结构之栈、队列及二叉树定义与用法浅析
Dec 27 Python
Python3.5基础之变量、数据结构、条件和循环语句、break与continue语句实例详解
Apr 26 Python
Python自动化运维之Ansible定义主机与组规则操作详解
Jun 13 Python
pytorch加载自定义网络权重的实现
Jan 07 Python
Python日志syslog使用原理详解
Feb 18 Python
浅谈Django QuerySet对象(模型.objects)的常用方法
Mar 28 Python
python让函数不返回结果的方法
Jun 22 Python
python中的random模块和相关函数详解
Apr 22 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 智能404跳转代码,适合换域名没改变目录的网站
2010/06/04 PHP
php取得字符串首字母的方法
2015/03/25 PHP
PHP加密解密字符串汇总
2015/04/26 PHP
PHP中生成UUID自定义函数分享
2015/06/10 PHP
PHP调用微博接口实现微博登录的方法示例
2018/09/22 PHP
JavaScript实际应用:innerHTMl和确认提示的使用
2006/06/22 Javascript
用jQuery获取IE9下拉框默认值问题探讨
2013/07/22 Javascript
javascript实现日期格式转换
2014/12/16 Javascript
Javascript基础教程之定义和调用函数
2015/01/18 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
2016/06/21 Javascript
Angular(5.2->6.1)升级小结
2018/12/27 Javascript
js实现滑动进度条效果
2020/08/21 Javascript
如何使用RoughViz可视化Vue.js中的草绘图表
2021/01/30 Vue.js
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
从零学Python之入门(三)序列
2014/05/25 Python
Python写的英文字符大小写转换代码示例
2015/03/06 Python
实例Python处理XML文件的方法
2015/08/31 Python
Python编程pygal绘图实例之XY线
2017/12/09 Python
Python线性方程组求解运算示例
2018/01/17 Python
对python插入数据库和生成插入sql的示例讲解
2018/11/14 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
基于python实现获取网页图片过程解析
2020/05/11 Python
python 如何在测试中使用 Mock
2021/03/01 Python
html5使用canvas压缩图片的示例代码
2018/09/11 HTML / CSS
吉列剃须刀英国官网:Gillette英国
2019/03/28 全球购物
委托与事件是什么关系?为什么要使用委托
2014/04/18 面试题
应届毕业生个人求职信范文
2014/01/29 职场文书
医院竞聘演讲稿
2014/05/16 职场文书
2015年世界环境日活动总结
2015/02/11 职场文书
2015年部门工作总结范文
2015/03/31 职场文书
发票退票证明
2015/06/24 职场文书
fastdfs+nginx集群搭建的实现
2021/03/31 Servers
Java内存模型之happens-before概念详解
2021/06/13 Java/Android
「月刊Comic Alive」2022年5月号封面公开
2022/03/21 日漫
使用Ajax实现无刷新上传文件
2022/04/12 Javascript