join()其实就是阻塞线程,控制线程的执行,从而控制住代码的执行顺序。
参照这篇文章:python3对多线程join的理解
通常都是,线程join()后,顺序执行join()后面的代码,如下面的例子:
def main(): print('---main begin----') t1 = threading.Thread(target=T1_job, name='T1') t2 = threading.Thread(target=T2_job, name='T2') t1.start() t2.start() t2.join() print("t2 done") t1.join() print("t1 done") print('---main end----') --------------------- 作者:阿常呓语 来源:CSDN 原文:https://blog.csdn.net/u010339879/article/details/86506450 版权声明:本文为博主原创文章,转载请附上博文链接!
t1和t2的开始顺序由系统决定,谁都可能先开始执行,如代码,t2.join(),print("t2 done")在先,而t1.join() print("t1 done")在后,则按照代码顺序,一定是print("t2 done")先执行,而 print("t1 done")后执行。当然这里在没有设定线程的等待时间timeout时,应该是按照线程运行完毕后在执行下一行代码。即t2运行完了,执行print("t2 done"),接着等t1执行完毕, print("t1 done")执行,最后print('---main end----')执行。可见,join()其实就是阻塞线程,控制代码的执行顺序的。当然,线程在执行时是并发的,只不过是他们的结束是按照join()的顺序来控制的。运行结果如下:
---main begin---- T1 start begin sleep 0.1s T2 start T2 finish t2 done begin sleep 0.1s begin sleep 0.1s begin sleep 0.1s begin sleep 0.1s begin sleep 0.1s begin sleep 0.1s begin sleep 0.1s begin sleep 0.1s begin sleep 0.1s T1 finish t1 done ---main end---- --------------------- 作者:阿常呓语 来源:CSDN 原文:https://blog.csdn.net/u010339879/article/details/86506450 版权声明:本文为博主原创文章,转载请附上博文链接!