最近案子要分析log資料,寫python程式的過程發現pandas.dataframe.apply() 不會自動平行計算,使得各別處理60萬筆資料時,只有一個CPU核心在跑,雖然給客戶的軟體不需要平行計算,但我自己在分析資料時,必須用平行計算來減少時間,故上網查資料研究出平行的方法。下列程式將平行要做的事情放入f函數的定義。
import multiprocessing as mp
def f(x,y):
return x*x*y
#一定要if main這一行,平行計算時會呼叫此主程式檔案,載入函數定義( f() ),若無,每個process都會重跑main下的程式
if __name__ == '__main__':
numCores = 7 #要使用的核心數,我的CPU有8核心,留一個給作業系統用,不然在跑分析時,電腦不能做其它事
y=4 #讓每個process共用的變數,實際程式是一個60萬列的dataframe變數
num_of_rows = 600000
with mp.Pool(numCores) as p:
print(p.starmap(f, [(x,y) for x in range(num_of_rows) ]))
沒有留言:
張貼留言