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中子类继承父类的__init__方法实例
Dec 15 Python
python的unittest测试类代码实例
Dec 07 Python
Python编程产生非均匀随机数的几种方法代码分享
Dec 13 Python
Python温度转换实例分析
Jan 17 Python
Python读取mat文件,并转为csv文件的实例
Jul 04 Python
Python import与from import使用及区别介绍
Sep 06 Python
Python类装饰器实现方法详解
Dec 21 Python
python opencv对图像进行旋转且不裁剪图片的实现方法
Jul 09 Python
python 自定义装饰器实例详解
Jul 20 Python
Python Pickle 实现在同一个文件中序列化多个对象
Dec 30 Python
python关于变量名的基础知识点
Mar 03 Python
python机器学习创建基于规则聊天机器人过程示例详解
Nov 02 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如何解决网站大流量与高并发的问题
2011/06/25 PHP
php中json_encode处理gbk与gb2312中文乱码问题的解决方法
2014/07/10 PHP
ThinkPHP登录功能的实现方法
2014/08/20 PHP
Thinkphp和onethink实现微信支付插件
2016/04/13 PHP
php 提交表单 关闭layer弹窗iframe的实例讲解
2018/08/20 PHP
解决Laravel5.2 Auth认证退出失效的问题
2019/10/14 PHP
JSON 数据格式介绍
2012/01/13 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
Javascript中实现trim()函数的两种方法
2015/02/04 Javascript
jQuery实现加入购物车飞入动画效果
2015/03/14 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
如何实现JavaScript动态加载CSS和JS文件
2020/12/28 Javascript
跟我学习javascript的闭包
2015/11/16 Javascript
详解JavaScript逻辑And运算符
2015/12/04 Javascript
javascript实现简易计算器的代码
2016/05/31 Javascript
JavaScript实现简单的拖动效果
2016/07/02 Javascript
Google 地图类型详解及示例代码
2016/08/06 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
2016/09/06 Javascript
JS实现二叉查找树的建立以及一些遍历方法实现
2017/04/17 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
让python的Cookie.py模块支持冒号做key的方法
2010/12/28 Python
Python简单的制作图片验证码实例
2017/05/31 Python
Python基于回溯法子集树模板实现图的遍历功能示例
2017/09/05 Python
python使用Paramiko模块实现远程文件拷贝
2019/04/30 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
执行Django数据迁移时报 1091错误及解决方法
2019/10/14 Python
通过实例了解python property属性
2019/11/01 Python
python GUI库图形界面开发之PyQt5窗口类QMainWindow详细使用方法
2020/02/26 Python
英国大码女性时装零售商:Evans
2018/08/29 全球购物
第28个世界无烟日活动总结
2015/02/10 职场文书
餐厅服务员管理制度
2015/08/05 职场文书
关于实现中国梦的心得体会
2016/01/05 职场文书
pytorch 两个GPU同时训练的解决方案
2021/06/01 Python