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中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
Python中类的继承代码实例
Oct 28 Python
python利用拉链法实现字典方法示例
Mar 25 Python
python爬虫框架talonspider简单介绍
Jun 09 Python
Python拼接微信好友头像大图的实现方法
Aug 01 Python
Python闭包思想与用法浅析
Dec 27 Python
Python 用matplotlib画以时间日期为x轴的图像
Aug 06 Python
python命名空间(namespace)简单介绍
Aug 10 Python
Python3和PyCharm安装与环境配置【图文教程】
Feb 14 Python
用Python绘制漫步图实例讲解
Feb 26 Python
如何在Django中使用聚合的实现示例
Mar 23 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 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极大的增强功能和性能
2006/10/09 PHP
PHP入门之常量简介和系统常量
2014/05/12 PHP
PHP统计目录大小的自定义函数分享
2014/11/18 PHP
ThinkPHP框架安全实现分析
2016/03/14 PHP
PHP设计模式之装饰器模式实例详解
2018/02/07 PHP
五个jQuery图片画廊插件 推荐
2011/05/12 Javascript
jQuery中$.fn的用法示例介绍
2013/11/05 Javascript
利用jquery写的左右轮播图特效
2014/02/12 Javascript
jQuery源码解读之removeAttr()方法分析
2015/02/20 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
浅谈window.onbeforeunload() 事件调用ajax
2016/06/29 Javascript
详解js中Json的语法与格式
2016/11/22 Javascript
Vue关于数据绑定出错解决办法
2017/05/15 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
前端MVVM框架解析之双向绑定
2018/01/24 Javascript
Vue登录注册并保持登录状态的方法
2018/08/17 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
node链接mongodb数据库的方法详解【阿里云服务器环境ubuntu】
2019/03/07 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
原生js+css实现tab切换功能
2020/09/17 Javascript
python list使用示例 list中找连续的数字
2014/01/27 Python
Python编程求质数实例代码
2018/01/31 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python读取英文文件并记录每个单词出现次数后降序输出示例
2018/06/28 Python
Python3中内置类型bytes和str用法及byte和string之间各种编码转换 问题
2018/09/27 Python
python安装pywin32clipboard的操作方法
2019/01/24 Python
Pycharm和Idea支持的vim插件的方法
2020/02/21 Python
python GUI库图形界面开发之PyQt5结合Qt Designer创建信号与槽的详细方法与实例
2020/03/08 Python
医院实习接收函
2014/01/12 职场文书
网络技术专业推荐信
2014/02/20 职场文书
企业指导教师评语
2014/04/28 职场文书
工伤事故证明
2014/10/20 职场文书
辞职信标准格式
2015/02/27 职场文书
会议主持词开场白
2015/05/28 职场文书
党小组评议意见
2015/06/02 职场文书