对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 条件判断的缩写方法
Sep 06 Python
python使用rabbitmq实现网络爬虫示例
Feb 20 Python
用Python代码来绘制彭罗斯点阵的教程
Apr 03 Python
python 网络爬虫初级实现代码
Feb 27 Python
python 遍历目录(包括子目录)下所有文件的实例
Jul 11 Python
python占位符输入方式实例
May 27 Python
Django中的用户身份验证示例详解
Aug 07 Python
Python爬虫入门有哪些基础知识点
Jun 02 Python
python利用xlsxwriter模块 操作 Excel
Oct 14 Python
Python time库的时间时钟处理
May 02 Python
Python Pandas解析读写 CSV 文件
Apr 11 Python
Python中的 No Module named ***问题及解决
Jul 23 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/03 咖啡文化
php set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
Redis在Laravel项目中的应用实例详解
2017/08/11 PHP
jQuery 前的按键判断代码
2010/03/19 Javascript
jquery一般方法介绍 入门参考
2011/06/21 Javascript
JSON格式的键盘编码对照表
2015/01/29 Javascript
JS随机调用指定函数的方法
2015/07/01 Javascript
多个上传文件用js验证文件的格式和大小的方法(推荐)
2017/03/09 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
快速解决vue在ios端下点击响应延时的问题
2018/08/27 Javascript
Vue组件通信的几种实现方法
2019/04/25 Javascript
Python字符串转换成浮点数函数分享
2015/07/24 Python
win与linux系统中python requests 安装
2016/12/04 Python
python 重定向获取真实url的方法
2018/05/11 Python
python使用turtle库绘制时钟
2020/03/25 Python
pandas去除重复列的实现方法
2019/01/29 Python
解决Django生产环境无法加载静态文件问题的解决
2019/04/23 Python
Python实现二叉搜索树BST的方法示例
2019/07/30 Python
PageFactory设计模式基于python实现
2020/04/14 Python
Pygame的程序开始示例代码
2020/05/07 Python
python numpy库np.percentile用法说明
2020/06/08 Python
Python xpath表达式如何实现数据处理
2020/06/13 Python
关于python的缩进规则的知识点详解
2020/06/22 Python
Python与C/C++的相互调用案例
2021/03/04 Python
Html5实现iPhone开机界面示例代码
2013/06/30 HTML / CSS
波兰快递服务:Globkurier.pl
2019/11/08 全球购物
秘书英文求职信范文
2014/01/31 职场文书
大学社团活动总结
2014/04/26 职场文书
师德师风建设方案
2014/05/08 职场文书
学校运动会报道稿
2014/09/23 职场文书
班级元旦晚会开幕词
2015/01/29 职场文书
2016年先进教师个人事迹材料
2016/02/26 职场文书
Python数据可视化之基于pyecharts实现的地理图表的绘制
2021/06/10 Python
Python中非常使用的6种基本变量的操作与技巧
2022/03/22 Python
Java对文件的读写操作方法
2022/04/29 Java/Android