对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 相关文章推荐
天翼开放平台免费短信验证码接口使用实例
Dec 18 Python
Python中转换角度为弧度的radians()方法
May 18 Python
举例讲解Python中的身份运算符的使用方法
Oct 13 Python
教你用Type Hint提高Python程序开发效率
Aug 08 Python
python 爬虫出现403禁止访问错误详解
Mar 11 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
pygame游戏之旅 载入小车图片、更新窗口
Nov 20 Python
python实现Flappy Bird源码
Dec 24 Python
用Python从0开始实现一个中文拼音输入法的思路详解
Jul 20 Python
python 实现视频 图像帧提取
Dec 10 Python
在Matplotlib图中插入LaTex公式实例
Apr 17 Python
python中append函数用法讲解
Dec 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
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
php eval函数用法 PHP中eval()函数小技巧
2012/10/31 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
列举PHP的Yii 2框架的开发优势
2015/07/03 PHP
PHP使用反向Ajax技术实现在线客服系统详解
2019/07/01 PHP
jquery复选框CHECKBOX全选、反选
2008/08/30 Javascript
JQuery与Ajax常用代码实现对比
2009/10/03 Javascript
js数值计算时使用parseInt进行数据类型转换(jquery)
2014/10/07 Javascript
ExpressJS入门实例
2015/01/14 Javascript
javacript获取当前屏幕大小
2016/06/04 Javascript
基于bootstrap实现广告轮播带图片和文字效果
2016/07/22 Javascript
Vue.js每天必学之Class与样式绑定
2016/09/05 Javascript
Bootstrap整体框架之JavaScript插件架构
2016/12/15 Javascript
AngularJS Select(选择框)使用详解
2017/01/18 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
详解使用fetch发送post请求时的参数处理
2017/04/05 Javascript
json对象及数组键值的深度大小写转换问题详解
2018/03/30 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
[02:27]2018DOTA2亚洲邀请赛赛前采访-OpTic
2018/04/03 DOTA
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python中is与==判断的区别
2017/03/28 Python
详解TensorFlow在windows上安装与简单示例
2018/03/05 Python
在IPython中进行Python程序执行时间的测量方法
2018/11/01 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
python使用pymongo与MongoDB基本交互操作示例
2020/04/09 Python
Html5写一个简单的俄罗斯方块小游戏
2019/12/03 HTML / CSS
JYSK加拿大:购买家具、床垫、家居装饰等
2020/02/14 全球购物
大学自我鉴定范文
2013/12/26 职场文书
访谈节目策划方案
2014/05/15 职场文书
光学与应用专业毕业生求职信
2014/09/01 职场文书
小王子读书笔记
2015/06/29 职场文书
SQL Server 数据库实验课第五周——常用查询条件
2021/04/05 SQL Server
Nginx缓存设置案例详解
2021/09/15 Servers
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL
python 使用pandas读取csv文件的方法
2022/12/24 Python