python多线程编程中的join函数使用心得


Posted in Python onSeptember 02, 2014

今天去辛集买箱包,下午挺晚才回来,又是恶心又是头痛。恶心是因为早上吃坏东西+晕车+回来时看到车祸现场,头痛大概是烈日和空调混合刺激而成。没有时间没有精神没有力气学习了,这篇博客就说说python中一个小小函数。

由于坑爹的学校坑爷的专业,多线程编程老师从来没教过,多线程的概念也是教的稀里糊涂,本人python也是菜鸟级别,所以遇到多线程的编程就傻眼了,别人用的顺手的join函数我却偏偏理解不来。早上在去辛集的路上想这个问题想到恶心,回来后继续写代码测试,终于有些理解了(python官方的英文解释理解不了,网友的解释也不够详细,只能自己钻)。
测试用的代码如下:

# coding: utf-8
# 测试多线程中join的功能
import threading, time  

def doWaiting():  

    print 'start waiting1: ' + time.strftime('%H:%M:%S') + "\n"  

    time.sleep(3)  

    print 'stop waiting1: ' + time.strftime('%H:%M:%S') + "\n" 

def doWaiting1():  

    print 'start waiting2: ' + time.strftime('%H:%M:%S') + "\n"   

    time.sleep(8)  

    print 'stop waiting2: ', time.strftime('%H:%M:%S') + "\n"  

tsk = []    

thread1 = threading.Thread(target = doWaiting)  

thread1.start()  

tsk.append(thread1)

thread2 = threading.Thread(target = doWaiting1)  

thread2.start()  

tsk.append(thread2)

print 'start join: ' + time.strftime('%H:%M:%S') + "\n"   

for tt in tsk:

    tt.join()

print 'end join: ' + time.strftime('%H:%M:%S') + "\n"

这个小程序使用了两个线程thread1和thread2,线程执行的动作分别是doWaiting()和doWaiting1(),函数体就是打印「开始」+休眠3秒+打印「结束」,分别附加上时间用来查看程序执行的过程。后面用start()方法同步开始执行两个线程。然后开始循环调用两个线程的join()方法,在此之前和之后都会用print函数做好开始结束的标记。我们主要观察for tt in tsk: tt.join()。

join()不带参数的情况下,执行如下:

python多线程编程中的join函数使用心得

可以看到,两个线程并行执行,进程1在3s后结束,进程2在8s后结束,然后回到主进程,执行打印「end join」。

下面把参数设置成超时2s,即tt.join(2),执行如下:

python多线程编程中的join函数使用心得

两个线程开始并发执行,然后执行线程1的join(2),等线程1执行2s后就不管它了,执行线程2的join(2),等线程2执行2s后也不管它了(在此过程中线程1执行结束,打印线程1的结束信息),开始执行主进程,打印「end join」。4s之后线程2执行结束。

总结一下:

1.join方法的作用是阻塞主进程(挡住,无法执行join以后的语句),专注执行多线程。

2.多线程多join的情况下,依次执行各线程的join方法,前头一个结束了才能执行后面一个。

3.无参数,则等待到该线程结束,才开始执行下一个线程的join。

4.设置参数后,则等待该线程这么长时间就不管它了(而该线程并没有结束)。不管的意思就是可以执行后面的主进程了。

最后附上参数为2时的程序执行流程表,自己画的orz,这样看起来更好理解。

python多线程编程中的join函数使用心得

Python 相关文章推荐
python中查看变量内存地址的方法
May 05 Python
Python中线程的MQ消息队列实现以及消息队列的优点解析
Jun 29 Python
python 捕获shell脚本的输出结果实例
Jan 04 Python
python基础教程之五种数据类型详解
Jan 12 Python
python3.6连接MySQL和表的创建与删除实例代码
Dec 28 Python
python3+PyQt5+Qt Designer实现堆叠窗口部件
Apr 20 Python
Python爬虫包BeautifulSoup简介与安装(一)
Jun 17 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
Django urls.py重构及参数传递详解
Jul 23 Python
Python数据可视化:饼状图的实例讲解
Dec 07 Python
YUV转为jpg图像的实现
Dec 09 Python
jupyter notebook参数化运行python方式
Apr 10 Python
python中的函数用法入门教程
Sep 02 #Python
python爬虫入门教程之点点美女图片爬虫代码分享
Sep 02 #Python
python爬虫入门教程之糗百图片爬虫代码分享
Sep 02 #Python
python批量同步web服务器代码核心程序
Sep 01 #Python
寻找网站后台地址的python脚本
Sep 01 #Python
python批量修改文件名的实现代码
Sep 01 #Python
python中List的sort方法指南
Sep 01 #Python
You might like
php模仿asp Application对象在线人数统计实现方法
2015/01/04 PHP
在Mac OS上自行编译安装Apache服务器和PHP解释器
2015/12/24 PHP
Laravle eloquent 多对多模型关联实例详解
2017/11/22 PHP
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
javasciprt下jquery函数$.post执行无响应的解决方法
2014/03/13 Javascript
javascript使用call调用微信API
2014/12/15 Javascript
利用JavaScript脚本实现滚屏效果的方法
2015/07/07 Javascript
JavaScript实现ASC转汉字及汉字转ASC的方法
2016/01/23 Javascript
javascript url几种编码方式详解
2016/06/06 Javascript
JavaScript无阻塞加载和defer、async详解
2017/02/26 Javascript
CheckBox多选取值及判断CheckBox选中是否为空的实例
2017/10/31 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
微信小程序实现简单表格
2019/02/14 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
详解elementui之el-image-viewer(图片查看器)
2019/08/30 Javascript
Flutter实现仿微信底部菜单栏功能
2019/09/18 Javascript
使用jQuery实现掷骰子游戏
2019/10/24 jQuery
JavaScript实现简单随机点名器
2019/11/21 Javascript
[02:28]DOTA2 2015国际邀请赛中国区预选赛首日现场百态
2015/05/26 DOTA
python实现单向链表详解
2018/02/08 Python
python xlsxwriter库生成图表的应用示例
2018/03/16 Python
python 读写文件,按行修改文件的方法
2018/07/12 Python
基于python实现百度翻译功能
2019/05/09 Python
使用python的pandas为你的股票绘制趋势图
2019/06/26 Python
python 进程的几种创建方式详解
2019/08/29 Python
python子线程退出及线程退出控制的代码
2019/10/16 Python
python pandas移动窗口函数rolling的用法
2020/02/29 Python
聊聊python中的异常嵌套
2020/09/01 Python
python如何写个俄罗斯方块
2020/11/06 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
使用css3 属性如何丰富图片样式(圆角 阴影 渐变)
2012/11/22 HTML / CSS
HTML5为输入框添加语音输入功能的实现方法
2017/02/06 HTML / CSS
Dr. Martens马汀博士法国官网:马丁靴鼻祖
2020/01/15 全球购物
博士研究生自我鉴定范文
2013/12/04 职场文书
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
唤醒紫霞仙子,携手再游三界!大话手游X《大话西游》电影合作专属剧情任务
2022/04/03 其他游戏