Python多进程加速:结合pathos与tqdm实现进度条监控

Theo
Theo
发布时间:2026-10-13 | 2人浏览过
原创

本文介绍如何在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加速后的运行时间表现如下:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表