学习来源
原文地址
一句话:对于 线程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的意义,这么想,如果让每个线程提取一个学生的一门课程的成绩,最终主线程来算平均成绩,在所有的非主线程完成工作之前,主线程是无法工作的,或者即使能计算,算出来的也不是想要的结果。
来源:CSDN
作者:BBJG_001
链接:https://blog.csdn.net/BBJG_001/article/details/103934616