本节开始前先让我们看个例子:
import threading
import time
def thread_job():
print("T1 start\n")
time.sleep(1)
print("T1 finish\n")
added_thread = threading.Thread(target=thread_job, name='T1')
added_thread.start()
print("all done\n")
大家可以多运行几次,会发现可能出现如下结果:
T1 start
all done
T1 finish
这是因为在T1 start执行后,线程转向去执行主线程main,主线程执行完成后才到子线程去执行剩下的语句,但如果我们想让子线程结束后才运行主线程该如何做呢?这就需要用到.join()方法。.join()的意思是讲线程加入另一线程的执行当中,另一线程会等待被加入的线程工作完成轴再继续原线程运行。这就好比有一项工作正在进行,结果老板又安排了另一项工作,并且要求你新安排的工作要先做完,然后再执行原来工作。将程序修改如下,多运行几次,可以看出在子线程结束后,主线程才结束:
import threading
import time
def thread_job():
print("T1 start\n")
time.sleep(1)
print("T1 finish\n")
added_thread = threading.Thread(target=thread_job, name='T1')
added_thread.start()
added_thread.join()
print("all done\n")
结果:
T1 start
T1 finish
all done
有时候加入的线程可能处理时间比较长,我们又不想等待如此长时间使这个进程执行完毕,可以在.join()中规定指定的时间,如.join(10)