python线程join函数的作用与使用方法

  • Post category:Python

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 参数的设置等内容。