多线程编程中的join函数使用心得

程派微信号:codingpy


作者:junjie

来源:jb51.net


这篇文章主要介绍了python多线程编程中的join函数使用心得,本文先是给出了join函数使用例子,并对join函数的使用作了总结,需要的朋友可以参考下。


EarlGrey:另外,可以参考 PythonTG 翻译组之前发布的《文学会Python多线程编程》。


今天去辛集买箱包,下午挺晚才回来,又是恶心又是头痛。恶心是因为早上吃坏东西+晕车+回来时看到车祸现场,头痛大概是烈日和空调混合刺激而成。没有时间没有精神没有力气学习了,这篇博客就说说python中一个小小函数。


由于坑爹的学校坑爷的专业,多线程编程老师从来没教过,多线程的概念也是教的稀里糊涂,本人python也是菜鸟级别,所以遇到多线程的编程就傻眼了,别人用的顺手的join函数我却偏偏理解不来。早上在去辛集的路上想这个问题想到恶心,回来后继续写代码测试,终于有些理解了(python官方的英文解释理解不了,网友的解释也不够详细,只能自己钻)。


测试用的代码如下:


这个小程序使用了两个线程thread1和thread2,线程执行的动作分别是doWaiting()和doWaiting1(),函数体就是打印「开始」+休眠3秒+打印「结束」,分别附加上时间用来查看程序执行的过程。后面用start()方法同步开始执行两个线程。然后开始循环调用两个线程的join()方法,在此之前和之后都会用print函数做好开始结束的标记。我们主要观察for tt in tsk: tt.join()。


join()不带参数的情况下,执行如下:


可以看到,两个线程并行执行,进程1在3s后结束,进程2在8s后结束,然后回到主进程,执行打印「end join」。


下面把参数设置成超时2s,即tt.join(2),执行如下:


两个线程开始并发执行,然后执行线程1的join(2),等线程1执行2s后就不管它了,执行线程2的join(2),等线程2执行2s后也不管它了(在此过程中线程1执行结束,打印线程1的结束信息),开始执行主进程,打印「end join」。4s之后线程2执行结束。


总结一下:


  • join方法的作用是阻塞主进程(挡住,无法执行join以后的语句),专注执行多线程。

  • 多线程多join的情况下,依次执行各线程的join方法,前头一个结束了才能执行后面一个。

  • 无参数,则等待到该线程结束,才开始执行下一个线程的join。

  • 设置参数后,则等待该线程这么长时间就不管它了(而该线程并没有结束)。不管的意思就是可以执行后面的主进程了。


最后附上参数为2时的程序执行流程表,自己画的orz,这样看起来更好理解。



欢迎转发至朋友圈。如无特殊注明,本公号所发文章均为原创或编译,如需转载,请联系「编程派」获得授权。

【近期优秀教程推荐】

使用好镜像源,把等待的时间转为生产力

用Python从头开发一个自己的Shell(上)

不懂排序算法?看这些舞者给你做的演示(下)

一文学会Python多进程编程

一文学会Python多线程编程

扫码关注编程派

获取最新教程及资源推送


↓↓↓ 点击阅读原文,查看更多Python教程


阅读原文:http://mp.weixin.qq.com/s?__biz=MzAwNDc0MTUxMw==&mid=2649639444&idx=1&sn=63d9c19d334c2314c24830566fcfc9a4#rd

你可能感兴趣的:(多线程编程中的join函数使用心得)