Python多进程加速:结合pathos与tqdm实现进度条监控
本文介绍如何在Python中利用pathos.multiprocessing库结合tqdm实现多进程并行计算及进度条显示。针对标准multiprocessing库仅支持单参数输入的局限,pathos可处理多参数函数。通过示例展示了如何定义迭代函数、配置超参数数组,并监控进程执行进度,有效加速高复杂度计算任务。
背景与需求
1.背景
当Python运行计算复杂度较高的函数时,若服务器单核CPU处理能力有限,耗时往往较长。此时,利用多核CPU进行多进程并行处理是提升运行速度的有效手段。
库的选择与安装
2.函数要求
本文采用的方案是使用pathos.multiprocessing库进行多进程处理,并配合tqdm库显示进度条。安装这两个库的方法如下:
pip install pathos
安装完成后,即可进行后续配置。
from pathos.multiprocessing import ProcessingPool as Pool
from tqdm import tqdm
选择pathos库的主要原因在于,Python标准库中的multiprocessing.Pool函数仅支持单参数输入(例如f(x) = x**2),无法直接处理如f(x, y) = x+y这类需要多个参数的函数。
对于包含默认参数或额外参数的函数,例如F(x, alpha=0.5, gamma=0.1),标准库的处理更为受限,而pathos能更好地支持此类场景。
代码实现细节
3.代码实现
首先定义一个函数F[X],其中输入X是一个可以在第一维度上进行迭代的数组,其形状为[num_X, len]。我们将针对第一维度的num_X个元素进行迭代计算。
def F(X,lamda=10,weight=0.05):
res={}
res.update(F_1(X,lamda=lamda,weight=weight))
res.update(F_2(X,lamda=lamda,weight=weight))
return res
函数F的输出x是一个字典(dict)格式。
尽管每次调用时超参数lamda和weight的值保持一致,但仍需将它们转换为数组形式,以便在迭代过程中传递给每个进程。
zip_lamda = [lamda for i in range(len(X)) ]
zip_weight = [weight for i in range(len(X)) ]
with tqdm(total=len(cold_sequences)) as t:
for i, x in enumerate(pool.imap(F,X,zip_lamda,zip_weight)):
X[i,:] = [x[key] for key in x.keys()]
Y[i,] = 0
t.update()
pool.close()
pool.join()
加速效果对比
4.结果分析
未使用multiprocess加速前的运行时间表现如下:

使用multiprocess加速后的运行时间表现如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













