对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基础之I/O模型
May 11 Python
python shell根据ip获取主机名代码示例
Nov 25 Python
pandas 条件搜索返回列表的方法
Oct 30 Python
python pygame实现2048游戏
Nov 20 Python
python+flask实现API的方法
Nov 21 Python
windows7 32、64位下python爬虫框架scrapy环境的搭建方法
Nov 29 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
pandas dataframe添加表格框线输出的方法
Feb 08 Python
Python实现朴素贝叶斯的学习与分类过程解析
Aug 24 Python
python协程gevent案例 爬取斗鱼图片过程解析
Aug 27 Python
Pycharm如何导入python文件及解决报错问题
May 10 Python
基于Python实现粒子滤波效果
Dec 01 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读取flv文件的播放时间长度
2009/09/03 PHP
PHP加密函数 Javascript/Js 解密函数
2013/09/23 PHP
删除PHP数组中头部、尾部、任意元素的实现代码
2017/04/10 PHP
JS和jquery获取各种屏幕的宽度和高度的代码
2013/08/02 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
JQuery表格拖动调整列宽效果(自己动手写的)
2014/09/01 Javascript
node.js中的fs.writeFile方法使用说明
2014/12/14 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
javascript学习小结之prototype
2015/12/03 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
js实现省市级联效果分享
2017/08/10 Javascript
使用Vue制作图片轮播组件思路详解
2018/03/21 Javascript
vue插件开发之使用pdf.js实现手机端在线预览pdf文档的方法
2018/07/12 Javascript
解决微信小程序云开发中获取数据库的内容为空的方法
2019/05/15 Javascript
微信小程序的开发范式BeautyWe.js入门详解
2019/07/10 Javascript
vue 实现Web端的定位功能 获取经纬度
2019/08/08 Javascript
Vue过渡效果之CSS过渡详解(结合transition,animation,animate.css)
2020/02/05 Javascript
Python中Collections模块的Counter容器类使用教程
2016/05/31 Python
python getopt详解及简单实例
2016/12/30 Python
Python 元类实例解析
2018/04/04 Python
Python shutil模块用法实例分析
2019/10/02 Python
增大python字体的方法步骤
2020/07/05 Python
python实现图像外边界跟踪操作
2020/07/13 Python
详解python的变量缓存机制
2021/01/24 Python
python中HTMLParser模块知识点总结
2021/01/25 Python
彼得罗夫美国官网:Peter Thomas Roth美国(青瓜面膜)
2017/11/05 全球购物
英国旅行箱包和行李箱购物网站:Travel Luggage & Cabin Bags
2019/08/26 全球购物
英国奢侈品在线精品店:Hervia
2020/09/03 全球购物
python+selenium小米商城红米K40手机自动抢购的示例代码
2021/03/24 Python
岗位竞聘演讲稿
2014/01/10 职场文书
青年教师典范事迹材料
2014/01/31 职场文书
益达广告词
2014/03/14 职场文书
竞选部长演讲稿
2014/04/26 职场文书
入党积极分子个人总结
2015/03/02 职场文书
冬季作息时间调整通知
2015/04/24 职场文书
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python