对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使用multiprocessing创建进程的方法
Jun 04 Python
Python开发微信公众平台的方法详解【基于weixin-knife】
Jul 08 Python
遗传算法之Python实现代码
Oct 10 Python
scrapy爬虫实例分享
Dec 28 Python
Python实现八皇后问题示例代码
Dec 09 Python
对Django url的几种使用方式详解
Aug 06 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
Python使用Socket实现简单聊天程序
Feb 28 Python
python 基于卡方值分箱算法的实现示例
Jul 17 Python
Python reques接口测试框架实现代码
Jul 28 Python
PyTorch 导数应用的使用教程
Aug 31 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
咖啡磨器 如何选购一台适合家用的意式磨豆机
2021/03/05 新手入门
PHP 中英文混合排版中处理字符串常用的函数
2007/04/12 PHP
apache+php+mysql安装配置方法小结
2010/08/01 PHP
Codeigniter发送邮件的方法
2015/03/19 PHP
PHP获取IP地址所在地信息的实例(使用纯真IP数据库qqwry.dat)
2016/11/15 PHP
thinkPHP5.0框架开发规范简介
2017/03/25 PHP
利用Dojo和JSON建立无限级AJAX动态加载的功能模块树
2007/03/24 Javascript
jquery $.ajax入门应用一
2008/11/19 Javascript
javascript 冒号 使用说明
2009/06/06 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
jQuery父级以及同级元素查找介绍
2013/09/04 Javascript
jquery mobile事件多次绑定示例代码
2013/09/13 Javascript
原生javascript实现的一个简单动画效果
2016/03/30 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
vue使用watch 观察路由变化,重新获取内容
2017/03/08 Javascript
基于vue组件实现猜数字游戏
2020/05/28 Javascript
JS实现登录页密码的显示和隐藏功能
2017/12/06 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
[09:37]DOTA2卡尔工作室 英雄介绍圣堂刺客篇
2013/06/13 DOTA
[01:19:11]Ti4 循环赛第二日 NaVi.us vs iG
2014/07/11 DOTA
Python+OpenCV实现车牌字符分割和识别
2018/03/31 Python
pytorch 加载(.pth)格式的模型实例
2019/08/20 Python
wxpython多线程防假死与线程间传递消息实例详解
2019/12/13 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
2020/04/24 Python
python操作链表的示例代码
2020/09/27 Python
浅谈HTML5中dialog元素尝鲜
2018/10/15 HTML / CSS
香港No.1得奖零食网:香港零食大王
2016/07/22 全球购物
设计毕业生简历中的自我评价
2013/10/01 职场文书
护士实习生自我鉴定范文
2013/12/10 职场文书
高一地理教学反思
2014/01/18 职场文书
留学推荐信怎么写
2014/01/25 职场文书
汽车维修专业自荐书
2014/05/26 职场文书
六五普法心得体会2016
2016/01/21 职场文书
小型企业的绩效考核制度模板
2019/11/21 职场文书
app场景下uniapp的扫码记录
2022/07/23 Java/Android