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中的List转化成dictionary
Aug 15 Python
Python 专题四 文件基础知识
Mar 20 Python
基于python爬虫数据处理(详解)
Jun 10 Python
Python中实现单例模式的n种方式和原理
Nov 14 Python
python requests证书问题解决
Sep 05 Python
Python爬虫实现“盗取”微信好友信息的方法分析
Sep 16 Python
Python selenium页面加载慢超时的解决方案
Mar 18 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
PHP基于phpqrcode类库生成二维码过程解析
May 28 Python
python爬虫基础知识点整理
Jun 02 Python
Python在centos7.6上安装python3.9的详细教程(默认python版本为2.7.5)
Oct 15 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 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数组及条件,循环语句学习
2012/11/11 PHP
PHP实现手机号码中间四位用星号(*)隐藏的自定义函数分享
2014/09/27 PHP
PHP将MySQL的查询结果转换为数组并用where拼接的示例
2016/05/13 PHP
php str_replace替换指定次数的方法详解
2017/05/05 PHP
javascript 冒号 使用说明
2009/06/06 Javascript
JavaScript prototype属性使用说明
2010/05/13 Javascript
javascript实现图片自动和可控的轮播切换特效
2015/04/13 Javascript
页面内容排序插件jSort使用方法
2015/10/10 Javascript
JavaScript简单实现鼠标移动切换图片的方法
2016/02/23 Javascript
原生js轮播(仿慕课网)
2017/02/15 Javascript
vue权限路由实现的方法示例总结
2018/07/29 Javascript
深入浅出理解JavaScript高级定时器原理与用法
2018/08/02 Javascript
微信小程序HTTP接口请求封装的实现
2019/02/21 Javascript
js实现视图和数据双向绑定的方法分析
2020/02/05 Javascript
js实现无缝轮播图效果
2020/03/09 Javascript
python with statement 进行文件操作指南
2014/08/22 Python
Python正则表达式实现截取成对括号的方法
2017/01/06 Python
详解python字节码
2018/02/07 Python
对python numpy数组中冒号的使用方法详解
2018/04/17 Python
python selenium自动上传有赞单号的操作方法
2018/07/05 Python
python pandas消除空值和空格以及 Nan数据替换方法
2018/10/30 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python3格式化字符串 f-string的高级用法(推荐)
2020/03/04 Python
Python sublime安装及配置过程详解
2020/06/29 Python
Python: glob匹配文件的操作
2020/12/11 Python
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
Sandro Paris美国官网:典雅别致的法国时尚服饰品牌
2017/12/26 全球购物
计算机专业个人求职信范例
2013/09/23 职场文书
五分钟演讲稿
2014/04/30 职场文书
优秀员工演讲稿
2014/05/19 职场文书
新课培训心得体会
2014/09/03 职场文书
学校党的群众路线教育实践活动总结材料
2014/10/30 职场文书
安全教育的主题班会
2015/08/13 职场文书
mybatis中sql语句CDATA标签的用法说明
2021/06/30 Java/Android
关于MySQL临时表为什么可以重名的问题
2022/03/22 MySQL
Javascript的promise,async和await的区别详解
2022/03/24 Javascript