PythonMultiprocessing多进程,使⽤多核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
weight什么时候用复数t.update()
pool.close()
pool.join()
4.结果
mutiprocess 加速前
mutiprocess 加速后
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论