对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 subprocess模块学习总结
Mar 13 Python
python处理圆角图片、圆形图片的例子
Apr 25 Python
Python里隐藏的“禅”
Jun 16 Python
Python实现Tab自动补全和历史命令管理的方法
Mar 12 Python
Python实现压缩和解压缩ZIP文件的方法分析
Sep 28 Python
python分布式环境下的限流器的示例
Oct 26 Python
Python3实现的简单验证码识别功能示例
May 02 Python
python批量查询、汉字去重处理CSV文件
May 31 Python
使用Python写一个量化股票提醒系统
Aug 22 Python
matplotlib绘制多个子图(subplot)的方法
Dec 03 Python
Python异常继承关系和自定义异常实现代码实例
Feb 20 Python
Tensorflow中的降维函数tf.reduce_*使用总结
Apr 20 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中用接口、抽象类、普通基类实现“面向接口编程”与“耦合方法”简述
2011/03/23 PHP
javascript类继承机制的原理分析
2009/09/12 Javascript
JS window.opener返回父页面的应用
2009/10/24 Javascript
JavaScript下通过的XMLHttpRequest发送请求的代码
2011/06/28 Javascript
js获取height和width的方法说明
2013/01/06 Javascript
jQuery ui插件的使用方法代码实例
2013/05/08 Javascript
JS实现点击图片在当前页面放大并可关闭的漂亮效果
2013/10/18 Javascript
js实现瀑布流的一种简单方法实例分享
2013/11/04 Javascript
document.execCommand()的用法小结
2014/01/08 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
JavaScript实现网站访问次数统计代码
2015/08/12 Javascript
bootstrap3 dialog 更强大、更灵活的模态框
2017/04/20 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
vue.js组件之间传递数据的方法
2017/07/10 Javascript
解决Vue打包之后文件路径出错的问题
2018/03/06 Javascript
又拍云 Node.js 实现文件上传、删除功能
2018/10/28 Javascript
详解基于Vue,Nginx的前后端不分离部署教程
2018/12/04 Javascript
详解vuex中action何时完成以及如何正确调用dispatch的思考
2019/01/21 Javascript
vue中实现高德定位功能
2019/12/03 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
微信小程序实现滚动Tab选项卡
2020/11/16 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
举例讲解Linux系统下Python调用系统Shell的方法
2015/11/07 Python
谈谈Python进行验证码识别的一些想法
2016/01/25 Python
Python算术运算符实例详解
2017/05/31 Python
基于Django URL传参 FORM表单传数据 get post的用法实例
2018/05/28 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
python自动发微信监控报警
2019/09/06 Python
python中调试或排错的五种方法示例
2019/09/12 Python
Python 寻找局部最高点的实现
2019/12/05 Python
Python常用库大全及简要说明
2020/01/17 Python
django使用JWT保存用户登录信息
2020/04/22 Python
在pycharm中使用pipenv创建虚拟环境和安装django的详细教程
2020/11/30 Python
Wallis官网:英国女装零售商
2020/01/21 全球购物
《罗布泊,消逝的仙湖》教学反思
2014/03/01 职场文书
2015年清明节活动总结
2015/02/09 职场文书