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生成随机数的方法
Jan 14 Python
用python登录Dr.com思路以及代码分享
Jun 25 Python
wxPython中listbox用法实例详解
Jun 01 Python
详谈python3 numpy-loadtxt的编码问题
Apr 29 Python
python看某个模块的版本方法
Oct 16 Python
python实现嵌套列表平铺的两种方法
Nov 08 Python
python分块读取大数据,避免内存不足的方法
Dec 10 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
详解python编译器和解释器的区别
Jun 24 Python
Django中的FBV和CBV用法详解
Sep 15 Python
Python tkinter 下拉日历控件代码
Mar 04 Python
Pyside2中嵌入Matplotlib的绘图的实现
Feb 22 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 strtotime函数详解
2009/12/18 PHP
通俗易懂的php防注入代码
2010/04/07 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
作为程序员必知的16个最佳PHP库
2015/12/09 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
Laravel程序架构设计思路之使用动作类
2018/06/07 PHP
JS效率个人经验谈(8-15更新),加入range技巧
2007/01/09 Javascript
js 点击按钮弹出另一页,选择值后,返回到当前页
2010/05/26 Javascript
JavaScript实现数组随机排序的方法
2015/06/26 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
nodejs入门教程三:调用内部和外部方法示例
2017/04/24 NodeJs
vuex2中使用mapGetters/mapActions报错的解决方法
2018/10/20 Javascript
Vue2(三)实现子菜单展开收缩,带动画效果实现方法
2019/04/28 Javascript
基于jQuery的时间戳与日期间的转化
2019/06/21 jQuery
vue-preview动态获取图片宽高并增加旋转功能的实现
2020/07/29 Javascript
Flask框架中密码的加盐哈希加密和验证功能的用法详解
2016/06/07 Python
python 实现一次性在文件中写入多行的方法
2019/01/28 Python
详解Python 4.0 预计推出的新功能
2019/07/26 Python
python使用socket 先读取长度,在读取报文内容示例
2019/09/26 Python
Python 生成VOC格式的标签实例
2020/03/10 Python
在django admin中配置搜索域是一个外键时的处理方法
2020/05/20 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
如果NULL和0作为空指针常数是等价的,那我到底该用哪一个
2014/09/16 面试题
linux面试题参考答案(6)
2014/08/29 面试题
党的群众路线教育实践活动个人批评与自我批评
2014/10/16 职场文书
2014年行政后勤工作总结
2014/12/06 职场文书
2016年“我们的节日·重阳节”主题活动总结
2016/04/01 职场文书
曾国藩励志经典名言37句,蕴含哲理
2019/10/14 职场文书
德劲DE1102数字调谐收音机机评
2022/04/07 无线电
分析SQL窗口函数之排名窗口函数
2022/04/21 Oracle
Python使用pyecharts控件绘制图表
2022/06/05 Python
Spring中bean集合注入的方法详解
2022/07/07 Java/Android