使用 Python 等待全部多线程任务结束

在很多应用场景下,我们需要在多个任务并发执行的情况下,等待所有任务完成后再继续执行后续逻辑。Python 的多线程模块 threading 可以帮助我们实现这一目标。本文将通过一个实例带你了解如何在 Python 中实现“等待全部多线程任务结束”的功能。

整体流程

下面是实现这个功能的步骤:

步骤 描述
1 导入所需的模块
2 定义一个线程要执行的任务
3 创建线程并启动
4 使用 join() 等待所有线程结束
5 输出结果

实现步骤详解

步骤 1:导入所需的模块

import threading  # 导入 threading 模块以创建和管理线程
import time  # 导入 time 模块,以便模拟任务执行时间

步骤 2:定义一个线程要执行的任务

在这个示例中,我们将定义一个简单的任务,任务会打印当前线程的名字并等待一段时间。

def task(n):
    print(f"任务 {n} 开始执行")
    time.sleep(2)  # 模拟任务执行,需要等待 2 秒
    print(f"任务 {n} 完成执行")

步骤 3:创建线程并启动

我们需要创建多个线程,并让它们执行刚刚定义的任务。

threads = []  # 创建一个线程列表以存储线程对象

for i in range(5):  # 创建 5 个线程
    thread = threading.Thread(target=task, args=(i,))  # 创建线程,目标为 task 函数,传递参数 i
    threads.append(thread)  # 将线程添加到列表
    thread.start()  # 启动线程

步骤 4:使用 join() 等待所有线程结束

我们将使用 join() 方法来确保主线程等待所有子线程完成。

for thread in threads:
    thread.join()  # 等待线程结束,确保所有任务完成

步骤 5:输出结果

最后,我们可以输出一条消息,表示所有线程都已完成。

print("所有任务已完成")

完整代码示例

将所有步骤结合在一起,完整代码如下:

import threading  # 导入 threading 模块
import time  # 导入 time 模块

def task(n):
    print(f"任务 {n} 开始执行")
    time.sleep(2)  # 模拟任务执行
    print(f"任务 {n} 完成执行")

threads = []  # 存储线程对象列表
for i in range(5):  # 创建 5 个线程
    thread = threading.Thread(target=task, args=(i,))  # 创建线程
    threads.append(thread)  # 添加到列表
    thread.start()  # 启动线程

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

print("所有任务已完成")  # 输出结果

关系图

下面是有关线程和任务的关系图,使用 Mermaid 的语法表示:

erDiagram
    THREAD ||--o{ TASK : executes
    THREAD {
        int id
        string status
    }
    TASK {
        int id
        string name
        int duration
    }

类图

以下是类图,表示线程和任务的类的结构:

classDiagram
    class Thread {
        +int id
        +string status
        +start() void
        +join() void
    }

    class Task {
        +int id
        +string name
        +execute() void
    }
    
    Thread o-- Task : executes

结语

通过上述示例,我们能够清晰地看到如何在 Python 中使用多线程,并等待所有线程任务的完成。使用 threading 模块的 join() 方法是保证主线程等待子线程结束的重要方式。这种方法在需要同步多线程任务时非常有效。希望这篇文章能够帮助你更好地理解 Python 中的多线程机制。如果你还有其他问题或需要更深入的了解,欢迎提问!