join()
是 Python 中用于控制线程执行顺序的方法之一。当一个程序中有多个线程同时运行时,如果想要让主线程等待其他各个子线程都结束后再结束,此时可以用 join()
方法来实现。具体来说,join()
方法是使得子线程加入到主线程中,等待主线程的结束。
join()
方法具有下述的用法:
t.join(timeout=None)
其中,参数 timeout
表示主线程最多等待子线程的执行时间,超过设定的时间则不再等待,直接继续执行主线程。
代码实例如下,定义一个简单的线程函数,在该线程函数中打印线程号及线程名称,主线程等待子线程执行完成后再结束:
import threading
def print_thread():
for i in range(5):
print(f'Thread {threading.get_ident()}, {threading.current_thread().name}: {i}')
t = threading.Thread(target=print_thread, name='Thread A')
t.start()
t.join()
print('Main thread finished.')
输出:
Thread 123145427744512, Thread A: 0
Thread 123145427744512, Thread A: 1
Thread 123145427744512, Thread A: 2
Thread 123145427744512, Thread A: 3
Thread 123145427744512, Thread A: 4
Main thread finished.
在上述代码中,首先定义了一个 print_thread
函数,该函数中打印当前线程的编号及线程名称;然后创建了线程 t
,并启动该线程;紧接着,主线程使用 join()
方法等待子线程执行完成后再继续执行,这里没有设置 timeout
参数,所以主线程会一直等待子线程执行完成;最后,主线程打印 Main thread finished
。
下面给出另一个代码实例,演示如何在使用 join()
方法时设置超时时间:
import threading
import time
def print_thread():
for i in range(5):
print(f'Thread {threading.get_ident()}, {threading.current_thread().name}: {i}')
time.sleep(0.5)
t = threading.Thread(target=print_thread, name='Thread A')
t.start()
t.join(timeout=2)
if t.is_alive():
print('Timeout, Thread A is still running...')
else:
print('Thread A finished.')
print('Main thread finished.')
在上述代码中,与上一个代码实例不同的是,print_thread
函数中每次打印完一行后会暂停 0.5 秒;而在主线程等待子线程时,设置了 timeout
参数为 2 秒,即主线程等待 2 秒后直接继续执行。
在上述代码中,若子线程在等待时间超过 2 秒后还没有执行完毕,则主线程的执行结果为 Timeout, Thread A is still running...
;否则,若子线程在 2 秒之内跑完,则主线程的执行结果为 Thread A finished.
。
以上就是关于 Python 线程 join()
方法的详细讲解与使用方法说明,通过这篇攻略,读者可以初步了解到如何使用 join()
、timeout
参数的设置等内容。