python 多进程 多核_Python Multiprocessing 多进程,使用多核CPU计算 并使用tqdm显示进度条...

1.背景

在python运行一些,计算复杂度比较高的函数时,服务器端单核CPU的情况比较耗时,因此需要多CPU使用多进程加快速度

2.函数要求

笔者使用的是:pathos.multiprocessing 库,进度条显示用tqdm库,安装方法:

pip install pathos

安装完成后

from pathos.multiprocessing import ProcessingPool as Pool

from tqdm import tqdm

这边使用pathos的原因是因为,multiprocessing 库中的Pool 函数只支持单参数输入,例如 f(x) = x**2,而不能处理 f (x,y) = x+y 这类的函数

更不用说一些需要参数的函数 例如:F(x , alpha=0.5, gamma = 0.1) 这样。

3.代码

定义一个 函数 F [ X ] ,其中,输入X是可以在第一个维度上迭代的array, 大小:[ 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

x 是 F 的输出,是一个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.结果

mutiprocess 加速前

f0cfacd0383a4978113ad6719ddd44ec.png

mutiprocess 加速后

716a9e2b5cb4ad71f9c577b9a398dcef.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中,可以使用`multiprocessing`模块来实现多进程编程。而要在多进程中同时使用`tqdm`来显示进度条,可以采用以下步骤: 首先,导入所需的模块和函数: ```python from multiprocessing import Pool from tqdm import tqdm ``` 然后,定义一个要在多进程中执行的函数,例如`run_task`: ```python def run_task(arg): # 这里是要执行的任务代码,可以根据实际情况进行修改 return arg * arg ``` 接着,定义一个函数来初始化进程池,并使用`tqdm`来显示进度条: ```python def main(): # 定义进程池大小 pool_size = 5 # 定义要处理的任务数量 task_count = 10 # 初始化进程池 pool = Pool(pool_size) # 使用tqdm显示进度条 with tqdm(total=task_count) as pbar: # 使用imap函数在多个进程中执行任务 for result in pool.imap(run_task, range(task_count)): # 这里可以对result进行处理或输出 pbar.update(1) # 关闭进程池 pool.close() pool.join() ``` 最后,调用`main`函数来执行多进程编程并显示进度条: ```python if __name__ == '__main__': main() ``` 以上代码将使用`tqdm`库来显示进度条,同时使用`multiprocessing`模块实现多进程编程。其中,`pool_size`用于定义进程池的大小,`task_count`表示要处理的任务数量。在`for`循环中,通过`imap`函数在多个进程中执行任务,并在每次任务完成后更新进度条。 总结起来,使用Python的`multiprocessing`模块和`tqdm`库可以实现同时进行多个进程的任务并在处理过程中显示进度条。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值