对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的Flask框架中实现简单的登录功能的教程
Apr 20 Python
Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】
Mar 18 Python
python multiprocessing模块用法及原理介绍
Aug 20 Python
python中图像通道分离与合并实例
Jan 17 Python
tensorflow 实现自定义layer并添加到计算图中
Feb 04 Python
django Layui界面点击弹出对话框并请求逻辑生成分页的动态表格实例
May 12 Python
python实现斗地主分牌洗牌
Jun 22 Python
Python 没有main函数的原因
Jul 10 Python
python读取图片颜色值并生成excel像素画的方法实例
Feb 19 Python
Python页面加载的等待方式总结
Feb 28 Python
python中的None与NULL用法说明
May 25 Python
使用Django实现商城验证码模块的方法
Jun 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中关于codeigniter的xmlrpc的类在进行数据交换时的类型问题
2011/07/03 PHP
给Javascript数组插入一条记录的代码
2007/08/30 Javascript
jquery获得下拉框值的代码
2011/08/13 Javascript
jQuery+ajax实现鼠标单击修改内容的方法
2014/06/27 Javascript
上传文件返回的json数据会被提示下载问题解决方案
2014/12/03 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
jQuery处理XML文件的几种方法
2016/06/14 Javascript
jQuery旋转插件jqueryrotate用法详解
2016/10/13 Javascript
canvas实现图像布局填充功能
2017/02/06 Javascript
详解Vue 非父子组件通信方法(非Vuex)
2017/05/24 Javascript
解决Vue页面固定滚动位置的处理办法
2017/07/13 Javascript
iscroll动态加载数据完美解决方法
2017/07/18 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
vue使用v-if v-show页面闪烁,div闪现的解决方法
2018/10/12 Javascript
Node.js安装详细步骤教程(Windows版)详解
2019/09/01 Javascript
vue 中url 链接左边的小图标更改问题
2019/12/30 Javascript
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
浅谈django model的get和filter方法的区别(必看篇)
2017/05/23 Python
Python使用matplotlib和pandas实现的画图操作【经典示例】
2018/06/13 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
python实现逐个读取txt字符并修改
2018/12/24 Python
Python List cmp()知识点总结
2019/02/18 Python
Python实现FM算法解析
2019/06/18 Python
python中 _、__、__xx__()区别及使用场景
2020/06/30 Python
美国婴儿用品店:Babies”R”Us
2017/10/12 全球购物
全球领先的全景影像品牌:Insta360
2019/08/21 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
linux系统都有哪些运行级别
2012/04/15 面试题
Shell如何接收变量输入
2012/09/24 面试题
分层教学实施方案
2014/03/19 职场文书
办公室打字员岗位职责
2014/04/16 职场文书
护理专科学生自荐书
2014/07/05 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
社区国庆节活动总结
2015/03/23 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书