1. 导入必要的库

首先,我们需要导入 concurrent.futures 模块,它提供了创建线程池的功能。我们可以使用 ThreadPoolExecutor 类来创建一个线程池。

复制
from concurrent.futures import ThreadPoolExecutor

2. 创建线程池

通过实例化 ThreadPoolExecutor 类来创建一个线程池。

复制
with ThreadPoolExecutor() as executor:
    # 在线程池中执行任务
    # ...

3. 在线程池中执行任务

通过使用 submit 方法向线程池提交任务,并指定任务的函数和参数。submit 方法会返回一个 Future 对象,用于跟踪任务的进度和获取返回结果。

示例1:在线程池中执行无参数函数

复制
import time

def task():
    print("开始执行任务")
    time.sleep(2)
    print("任务执行完成")

with ThreadPoolExecutor() as executor:
    future = executor.submit(task)
    # 这里可以继续执行其他任务
    future.result()  # 阻塞等待任务执行完成

示例2:在线程池中执行带参数的函数

复制
def task(name):
    print(f"{name} 开始执行任务")
    time.sleep(2)
    print(f"{name} 任务执行完成")

with ThreadPoolExecutor() as executor:
    future = executor.submit(task, "任务1")
    # 这里可以继续执行其他任务
    future.result()  # 阻塞等待任务执行完成

4. 控制线程池的大小

默认情况下,ThreadPoolExecutor 创建的线程池大小是根据系统的 CPU 数量自动确定的。但是,我们也可以通过指定参数 max_workers 来手动设置线程池的大小。

示例:

复制
with ThreadPoolExecutor(max_workers=5) as executor:
    # 在线程池中执行任务
    # ...

5. 处理任务返回结果

上述示例中,我们使用了 future.result() 方法来阻塞等待任务的执行结果。这种方式同步地获取任务结果。如果我们不关心任务的返回结果,可以不使用该方法。

如果需要在任务执行完成后获取返回结果,可以使用 future.result() 方法。

示例:

复制
def task():
    # 假设这里是一个耗时的任务
    time.sleep(2)
    return "任务执行完成"

with ThreadPoolExecutor() as executor:
    future = executor.submit(task)
    # 这里可以继续执行其他任务
    result = future.result()  # 阻塞等待任务执行完成
    print(f"任务返回结果:{result}")

总结

通过导入 concurrent.futures 模块,我们可以轻松地创建并使用线程池。使用 submit 方法可以向线程池提交任务,并可通过 future.result() 等待任务执行完成并获取返回结果。同时,我们也可以通过指定 max_workers 控制线程池的大小。

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注