you can go here to see the details.
我的理解:使用join后,使主线程执行完后(挂起),子线程再执行完后,主线程才结束。否则主线程会直接结束导致子线程不会执行。
import time import threading def testRun(): print('-----start-----') # 1. 执行 time.sleep(2) # 2. 阻塞(挂起,执行下一个线程:1和2步循环,直到所有线程都执行完 1,然后接着往下执行3) print(f"当前线程名字:{threading.current_thread().name}") # 3 (3和4循环,直到所有线程都执行完3,然后接着往下执行5...) time.sleep(2) # 4 print('qeada') # 5 thread_list = [] start = time.time() for i in range(5): t = threading.Thread(target=testRun) thread_list.append(t) for t in thread_list: t.setDaemon(True) t.start() for t in thread_list: # 不使用join,会导致所有子线程遇到阻塞后,主线程并不会等待子线程阻塞结束而直接结束。 t.join() print("it's over.") print(f"总耗时:{time.time()-start}") >>> -----start----- -----start----- -----start----- -----start----- -----start----- 当前线程名字:Thread-1 当前线程名字:Thread-2 当前线程名字:Thread-4 当前线程名字:Thread-3 当前线程名字:Thread-5 qeada qeada qeada qeada qeada it's over. 总耗时:4.006011962890625