📜  python 使用 tqdm 和并发期货 - Python (1)

📅  最后修改于: 2023-12-03 14:46:12.573000             🧑  作者: Mango

使用 tqdm 和并发期货 - Python

在Python中,tqdmconcurrent.futures库是非常有用的工具,用于处理异步任务和显示进度条。本文将介绍如何在Python中使用这两个库来同时执行并发任务并显示进度条。

安装依赖库

首先,在终端中使用以下命令来安装所需的依赖库:

pip install tqdm
并发执行任务

我们将使用concurrent.futures库来实现并发执行多个任务。该库提供了ThreadPoolExecutorProcessPoolExecutor两个类,用于创建线程池和进程池,从而在Python中实现并发执行。

import concurrent.futures

# 创建线程池
with concurrent.futures.ThreadPoolExecutor() as executor:
    # 提交任务
    future1 = executor.submit(some_function, arg1, arg2)
    future2 = executor.submit(another_function, arg3, arg4)
    
    # 等待任务执行完成
    result1 = future1.result()
    result2 = future2.result()

上面的代码中,some_functionanother_function是我们想要并发执行的函数,arg1arg2arg3arg4为这些函数的参数。executor.submit()方法用于提交任务,返回一个Future对象,表示该任务的未来结果。我们可以使用future.result()方法来获取任务的返回值。

显示进度条

为了显示进度条,我们将使用tqdm库。它提供了一个ProgressBar类,可以用来显示迭代过程的进度。

from tqdm import tqdm

# 创建一个进度条
bar = tqdm(total=num_tasks)

# 在任务执行过程中更新进度条
for task in tasks:
    # 执行任务
    result = perform_task(task)
    
    # 更新进度条
    bar.update(1)

# 关闭进度条
bar.close()

上述代码中,num_tasks表示要执行的任务数量,tasks是一个包含任务的列表。我们使用tqdm(total=num_tasks)创建一个进度条,并在每次任务执行完成后调用bar.update(1)来更新进度条。最后,使用bar.close()关闭进度条。

完整示例

以下是一个完整的示例,演示了如何使用tqdmconcurrent.futures来并发执行任务并显示进度条。

import concurrent.futures
from tqdm import tqdm

def perform_task(task):
    # 执行任务的代码
    return result

# 并发执行任务
tasks = [task1, task2, task3]

with concurrent.futures.ThreadPoolExecutor() as executor:
    # 创建进度条
    bar = tqdm(total=len(tasks))
    
    # 提交任务并更新进度条
    futures = []
    for task in tasks:
        future = executor.submit(perform_task, task)
        # 保存每个任务的Future对象
        futures.append(future)
        # 更新进度条
        bar.update(1)
        
    # 获取任务的结果
    results = []
    for future in concurrent.futures.as_completed(futures):
        result = future.result()
        results.append(result)
    
    # 关闭进度条
    bar.close()

# 显示任务结果
for result in results:
    print(result)

上述代码中,perform_task()函数是一个模拟的任务执行函数,你可以根据实际情况进行替换。tasks列表中包含要执行的任务,我们使用executor.submit()方法提交这些任务,并使用concurrent.futures.as_completed()函数获取每个任务的返回结果。

这样,在执行任务的过程中,你将看到一个滚动的进度条,显示已经完成的任务数量。

结论

通过使用tqdmconcurrent.futures库,我们可以方便地在Python中实现并发执行任务并显示进度条的功能。这对于处理大量任务或长时间运行的任务非常有用,同时也提高了代码的可读性和用户体验。

希望本文能帮助你了解如何使用tqdmconcurrent.futures库来优化并发任务和显示进度条的实现。