Python多线程2 join()

别说谁变了你拦得住时间么 提交于 2020-01-11 19:38:27

学习来源
原文地址
一句话:对于 线程i.join() 这一行代码,其后的代码都要等待线程i完成之后才能执行。

import threading
import time

def T1_job():
    print('T1 start\n')
    time.sleep(1)
    print('T1 finished')

def T2_job():
    print('T2 start\n')
    time.sleep(1)
    print('T2 finished\n')

def main():
    thread1 = threading.Thread(target=T1_job, name='T1')
    thread2 = threading.Thread(target=T2_job, name='T2')
    thread1.start()
    thread2.start()
    # print('<<<<<<<<<<<<<<<<<test point1>>>>>>>>>>>>>>>>>>>>')
    # thread2.join()      # join()的顺序不会影响程序的实际执行
    # print('<<<<<<<<<<<<<<<<<test point2>>>>>>>>>>>>>>>>>>>>')
    thread1.join()   # join()之后,后续命令要等到add_thread完成之后才运行
    # print('<<<<<<<<<<<<<<<<<test point3>>>>>>>>>>>>>>>>>>>>')
    thread2.join()  	# join()的顺序不会影响程序的实际执行
    print('all done\n')

if __name__ == '__main__':
    main()

对于这种情况

线程1.join()
代码A
线程2.join()

代码A不会等待线程2

可以通过改变T1_job和T2_job中time.sleep的时间、在main()函数中增加test point的方式来进一步理解join()函数的作用。至于join的意义,这么想,如果让每个线程提取一个学生的一门课程的成绩,最终主线程来算平均成绩,在所有的非主线程完成工作之前,主线程是无法工作的,或者即使能计算,算出来的也不是想要的结果。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!