对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使用函数默认值实现函数静态变量的方法
Aug 18 Python
Python代码实现KNN算法
Dec 20 Python
Python+OpenCV人脸检测原理及示例详解
Oct 19 Python
Python pygorithm模块用法示例【常见算法测试】
Aug 16 Python
Appium Python自动化测试之环境搭建的步骤
Jan 23 Python
详解python中sort排序使用
Mar 23 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
numpy linalg模块的具体使用方法
May 26 Python
Python实现一个数组除以一个数的例子
Jul 20 Python
python常见字符串处理函数与用法汇总
Oct 30 Python
flask的orm框架SQLAlchemy查询实现解析
Dec 12 Python
基于python检查矩阵计算结果
May 21 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 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP 常用数组内部函数(Array Functions)介绍
2013/06/05 PHP
体育彩票排列三组选三算法分享
2014/03/07 PHP
destoon整合UCenter图文教程
2014/06/21 PHP
php实现mysql备份恢复分卷处理的方法
2014/12/26 PHP
在WordPress中实现评论头像的自定义默认和延迟加载
2015/11/24 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
详解Yii实现分页的两种方法
2017/01/14 PHP
js+html+css实现鼠标移动div实例
2013/01/30 Javascript
JS中showModalDialog 的使用解析
2013/04/17 Javascript
js(jQuery)获取时间的方法及常用时间类搜集
2013/10/23 Javascript
探讨js字符串数组拼接的性能问题
2014/10/11 Javascript
jQuery搜索框效果实现代码(百度关键词联想)
2021/02/25 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
详解使用JS如何制作简单的ASCII图与单极图
2017/03/31 Javascript
详解如何构建Angular项目目录结构
2017/07/13 Javascript
node上的redis调用优化示例详解
2018/10/30 Javascript
Vuex中的State使用介绍
2019/01/19 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
python中函数总结之装饰器闭包详解
2016/06/12 Python
Python+tkinter模拟“记住我”自动登录实例代码
2018/01/16 Python
python:print格式化输出到文件的实例
2018/05/14 Python
Python生成个性签名图片获取GUI过程解析
2019/12/16 Python
python torch.utils.data.DataLoader使用方法
2020/04/02 Python
PyTorch: Softmax多分类实战操作
2020/07/07 Python
python如何实现递归转非递归
2021/02/25 Python
大学系主任推荐信范文
2013/12/24 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
弘扬焦裕禄精神践行三严三实心得体会
2014/10/13 职场文书
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
2014年业务工作总结
2014/11/17 职场文书
优秀员工事迹材料
2014/12/20 职场文书
六一儿童节开幕词
2015/01/29 职场文书
员工升职自荐信
2015/03/27 职场文书
餐厅开业活动方案
2019/07/08 职场文书
redis实现共同好友的思路详解
2021/05/26 Redis