📜  tqdm 并行 - Python (1)

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

并行计算的引出

在实际开发和运营中,我们通常要处理大量的数据或执行多个相同或相似的任务。这种情况往往需要进行并行处理,以减少计算时间和增加计算效率。在Python中,并行计算可以通过多进程或多线程来实现,常见的并行计算库有multiprocessingconcurrent.futures

在多进程或多线程中,我们往往需要输出进度条,以便更直观地观察程序运行状态。此时,我们可以利用tqdm库来实现并行处理,并输出进度条。

tqdm库的介绍

tqdm是一个快速、可扩展的Python进度条,可以在Python脚本中进行简单的操作来增加或删除进度条,或者添加或者删除元素。它可以在Python的迭代器中,如for循环和while循环中追踪进度,并用带时间和百分比的进度条来展示。此外,它还提供了一些有用的功能,如估计时间剩余、动态调整参数等。

tqdm库的安装

可以通过pip命令来安装tqdm库:

pip install tqdm

使用tqdm进行并行计算

tqdm库提供了concurrent.futures模块,可以方便地进行并行计算,并输出进度条。以下是一个简单的例子:

import concurrent.futures
from tqdm import tqdm

def process(num):
    # do something
    return num * num

def main():
    data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    results = []
    with concurrent.futures.ProcessPoolExecutor() as executor:
        futures = [executor.submit(process, num) for num in data]
        with tqdm(total=len(data)) as pbar:
            for future in concurrent.futures.as_completed(futures):
                result = future.result()
                results.append(result)
                pbar.update(1)
    print(results)

if __name__ == '__main__':
    main()

上述代码中,首先定义了一个process函数,表示将要执行的任务,此处简单地对输入的数值求平方。然后在main函数中,定义了数据列表data,并使用tqdm创建了一个进度条pbar。在并行处理时,使用concurrent.futures模块中的ProcessPoolExecutor创建进程池,使用executor.submit方法提交每个任务,并将返回的future对象添加到列表futures中。接着使用concurrent.futures.as_completed迭代已完成的future对象,并使用future.result方法获取结果,并将结果添加到结果列表results中。同时,在每次添加结果时,使用pbar.update(1)更新进度条。

运行上述代码,可以看到一个进度条,表示任务正在正在处理,同时输出结果列表。