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版本的按任意键继续/退出
Sep 26 Python
ubuntu安装mysql pycharm sublime
Feb 20 Python
python 读取DICOM头文件的实例
May 07 Python
Python3简单实现串口通信的方法
Jun 12 Python
PyQt4实时显示文本内容GUI的示例
Jun 14 Python
python实现字符串和数字拼接
Mar 02 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
jupyter实现重新加载模块
Apr 16 Python
python 使用递归的方式实现语义图片分割功能
Jul 16 Python
Django静态文件加载失败解决方案
Aug 26 Python
Python打包为exe详细教程
May 18 Python
Python多个MP4合成视频的实现方法
Jul 16 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
漂亮但不安全的CTB
2006/10/09 PHP
Windows PHP5和Apache的安装与配置
2009/06/08 PHP
基于PHP文件操作的详细诠释
2013/06/21 PHP
PHP开发框架laravel安装与配置教程
2015/03/13 PHP
PHP安装BCMath扩展的方法
2019/02/13 PHP
JavaScript高级程序设计 DOM学习笔记
2011/09/10 Javascript
用unescape反编码得出汉字示例
2014/04/24 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
javascript判断css3动画结束 css3动画结束的回调函数
2015/03/10 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
Bootstrap Search Suggest使用例子
2016/12/21 Javascript
JS操作xml对象转换为Json对象示例
2017/03/25 Javascript
微信小程序 动态绑定事件并实现事件修改样式
2017/04/13 Javascript
图文详解vue框架安装步骤
2019/02/12 Javascript
vue+swiper实现左右滑动的测试题功能
2020/10/30 Javascript
sqlalchemy对象转dict的示例
2014/04/22 Python
Python简单日志处理类分享
2015/02/14 Python
实例解析Python中的__new__特殊方法
2016/06/02 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
python创建文件时去掉非法字符的方法
2018/10/31 Python
Python线性拟合实现函数与用法示例
2018/12/13 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
python plotly绘制直方图实例详解
2019/07/22 Python
使用pyqt 实现重复打开多个相同界面
2019/12/13 Python
Python3.9最新版下载与安装图文教程详解(Windows系统为例)
2020/11/28 Python
CSS3 box-sizing属性
2009/04/17 HTML / CSS
naturalizer加拿大官网:美国娜然女鞋
2017/04/04 全球购物
德国传统玻璃制造商:Cristalica
2018/04/23 全球购物
俄语专业毕业生推荐信
2013/10/28 职场文书
教师个人剖析材料
2014/02/05 职场文书
工商企业管理应届生求职信
2014/05/04 职场文书
社区服务活动小结
2014/07/08 职场文书
毕业典礼主持词
2015/06/29 职场文书
商业计划书范文
2019/04/24 职场文书