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 加速前

 

mutiprocess 加速后

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM