对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 文件重命名工具代码
Jul 26 Python
python中的对象拷贝示例 python引用传递
Jan 23 Python
对numpy中的数组条件筛选功能详解
Jul 02 Python
使用pandas批量处理矢量化字符串的实例讲解
Jul 10 Python
python 设置输出图像的像素大小方法
Jul 04 Python
解决django 新增加用户信息出现错误的问题
Jul 28 Python
python字典的setdefault的巧妙用法
Aug 07 Python
使用PyTorch实现MNIST手写体识别代码
Jan 18 Python
python实现可下载音乐的音乐播放器
Feb 25 Python
python标准库OS模块详解
Mar 10 Python
keras 使用Lambda 快速新建层 添加多个参数操作
Jun 10 Python
撤回我也能看到!教你用Python制作微信防撤回脚本
Jun 11 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.ini中文版(1)
2006/10/09 PHP
PHP Undefined index报错的修复方法
2011/07/17 PHP
php中通过正则表达式下载内容中的远程图片的函数代码
2012/01/10 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
PHP实现的下载远程文件类定义与用法示例
2017/07/05 PHP
浅谈Laravel核心解读之Console内核
2018/12/02 PHP
PHP使用 Pear 进行安装和卸载包的方法详解
2019/07/08 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
javascript网页关键字高亮代码
2008/07/30 Javascript
Javascript排序算法之合并排序(归并排序)的2个例子
2014/04/04 Javascript
深入解析JavaScript的闭包机制
2015/10/20 Javascript
基于BootStrap Metronic开发框架经验小结【六】对话框及提示框的处理和优化
2016/05/12 Javascript
Bootstrap风格的WPF样式
2016/12/07 Javascript
Js实现中国公民身份证号码有效性验证实例代码
2017/05/03 Javascript
使用Node.js搭建静态资源服务详细教程
2017/08/02 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
JS实现点击链接切换显示隐藏内容的方法
2017/10/19 Javascript
Vue获取页面元素的相对位置的方法示例
2020/02/05 Javascript
Python中使用platform模块获取系统信息的用法教程
2016/07/08 Python
python 编写简单网页服务器的实例
2018/06/01 Python
Python基于多线程实现ping扫描功能示例
2018/07/23 Python
Python实现针对json中某个关键字段进行排序操作示例
2018/12/25 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
Django values()和value_list()的使用
2020/03/31 Python
使用jupyter notebook运行python和R的步骤
2020/08/13 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
2020/11/02 Python
解决Firefox下不支持outerHTML问题代码分享
2014/06/04 HTML / CSS
美国工业用品采购网站:Zoro.com
2020/10/27 全球购物
会计系个人求职信范文分享
2013/12/20 职场文书
师范生自我鉴定
2014/03/20 职场文书
大型会议策划方案
2014/05/17 职场文书
嵌入式Redis服务器在Spring Boot测试中的使用教程
2021/07/21 Redis
MySQL修炼之联结与集合浅析
2021/10/05 MySQL
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python