对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写的英文字符大小写转换代码示例
Mar 06 Python
基于wxpython开发的简单gui计算器实例
May 30 Python
使用python实现链表操作
Jan 26 Python
python使用PIL模块获取图片像素点的方法
Jan 08 Python
python+OpenCV实现图像拼接
Mar 05 Python
Python3批量创建Crowd用户并分配组
May 20 Python
基于python 取余问题(%)详解
Jun 03 Python
使用Python实现微信拍一拍功能的思路代码
Jul 09 Python
Python爬虫实例——scrapy框架爬取拉勾网招聘信息
Jul 14 Python
详解用Python把PDF转为Word方法总结
Apr 27 Python
Python3中最常用的5种线程锁实例总结
Jul 07 Python
Python Matplotlib绘制等高线图与渐变色扇形图
Apr 14 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选择排序法实现数组排序实例分析
2015/02/16 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
PHP开发中csrf攻击的简单演示和防范
2017/05/07 PHP
PHP排序算法之归并排序(Merging Sort)实例详解
2018/04/21 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
ajaxControlToolkit AutoCompleteExtender的用法
2008/10/30 Javascript
javascript控制frame,iframe的src属性代码
2009/12/31 Javascript
转换json格式的日期为Javascript对象的函数
2010/07/13 Javascript
一个分享按钮的插件使用介绍(可扩展,内附开发制作流程)
2011/09/19 Javascript
文字不间断滚动(上下左右)实例代码
2013/04/21 Javascript
IE6下拉框图层问题探讨及解决
2014/01/03 Javascript
javascript 回到顶部效果的实现代码
2014/02/17 Javascript
Jquery性能优化详解
2014/05/15 Javascript
浅谈Unicode与JavaScript的发展史
2015/01/19 Javascript
JavaScript中textRange对象使用方法小结
2015/03/24 Javascript
对angularJs中2种自定义服务的实例讲解
2018/09/30 Javascript
详解如何在vue项目中使用layui框架及采坑
2019/05/05 Javascript
JS实现轮播图效果
2020/01/11 Javascript
从零使用TypeScript开发项目打包发布到npm
2020/02/14 Javascript
Postman环境变量全局变量使用方法详解
2020/08/13 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
使用IPython下的Net-SNMP来管理类UNIX系统的教程
2015/04/15 Python
TensorFlow实现模型评估
2018/09/07 Python
python爬虫爬取幽默笑话网站
2019/10/24 Python
python分布式计算dispy的使用详解
2019/12/22 Python
在pytorch中对非叶节点的变量计算梯度实例
2020/01/10 Python
使用HTML5原生对话框元素并轻松创建模态框组件
2019/03/06 HTML / CSS
Fresh馥蕾诗英国官网:法国LVMH集团旗下高端天然护肤品牌
2018/11/01 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
俄罗斯最大的隐形眼镜销售网站:Ochkov.Net
2021/02/07 全球购物
制药工程专业个人求职自荐信
2014/01/25 职场文书
《猫》教学反思
2014/02/26 职场文书
大班亲子运动会方案
2014/06/10 职场文书
MySQL的join buffer原理
2021/04/29 MySQL
整理Python中常用的conda命令操作
2021/06/15 Python