欢迎访问宙启技术站
智能推送

使用threading.Thread.join()等待所有子线程结束

发布时间:2023-12-18 07:34:15

Python的threading模块提供了Thread类来创建和管理线程。在多线程程序中,有时候需要等待所有子线程执行完毕后再继续执行主线程的逻辑。这时可以使用Thread.join()方法来实现等待所有子线程结束。

Thread.join()方法用于阻塞当前线程,等待被调用线程结束。如果不指定超时时间,那么调用线程会一直阻塞,直到被调用线程结束为止。

下面以一个简单的例子来说明如何使用Thread.join()等待所有子线程结束。

import threading
import time

# 定义一个子线程类
class MyThread(threading.Thread):
    def __init__(self, name, delay):
        super().__init__()
        self.name = name
        self.delay = delay
    
    def run(self):
        print(self.name + " started")
        time.sleep(self.delay)
        print(self.name + " finished")

# 创建5个子线程
threads = []
for i in range(5):
    thread = MyThread("Thread-" + str(i), i)
    threads.append(thread)

# 启动所有子线程
for thread in threads:
    thread.start()

# 等待所有子线程结束
for thread in threads:
    thread.join()

# 所有子线程都结束了,主线程继续执行
print("All threads finished")

在上述代码中,我们首先定义了一个类MyThread,继承自Thread类,并重写了run()方法。run()方法定义了子线程的具体逻辑,即打印线程的名字,然后延迟一段时间后结束。

然后我们创建了5个MyThread的实例,分别启动了这5个子线程。接着我们使用for循环遍历所有子线程,调用Thread.join()方法来等待它们全部结束。最后,在主线程中打印"All threads finished",表示所有子线程都已经结束。

总结来说,使用Thread.join()方法等待所有子线程结束的步骤如下:

1. 创建并启动所有子线程。

2. 使用for循环遍历所有子线程,并调用Thread.join()方法等待它们结束。

3. 在主线程中执行需要等待所有子线程结束后才能执行的逻辑。