所以我想讀一堆非常大的數據文件,每個需要相當一些時間來加載。我想弄清楚如何以最快的方式加載它們,而不會遇到內存問題。一旦數據文件被加載到數組中正確的方式我不需要寫入它們,但只需要閱讀。我一直在嘗試並行化這段時間,但無法弄清楚。Python多處理與數組和多個參數
假設我有400個時間文件。每個文件都是製表符分隔的,每個文件有30個變量,每個變量有40,000個數據點。我想創建一個400x30x40000陣列,以便我可以輕鬆訪問這些點。 數據文件的設置使得前40k點用於變量1,第二個40k用於var 2,依此類推。
我寫了一個函數,正確加載時間文件並將其正確存儲在我的數組中。我遇到的麻煩是將其並行化。如果我將它放在for循環中並遍歷i,這會起作用。
import h5py
import pandas as pd
h5file = h5py.File('data.h5','a')
data = h5file.create_dataset("default",(len(files),len(header),numPts))
# is shape 400x30x40000
def loadTimes(files,i,header,numPts,data):
# files has 400 elements
# header has 30 elements
# numPts is an integer
allData = pd.read_csv(files[i],delimiter="\t",skiprows=2,header=None).T
for j in range(0,len(header)):
data[i,j,:] = allData[0][j*numPts:(j+1)*numPts]
del allData
文件是由subprocess.check_output
(具有約400的元件)的加載時間文件列表中,頭是變量列表,從另一文件中加載(在具有30種元素)。 numPts是每個變量的點數(大約40k)。
我試過使用pool.map
加載數據,但發現它不喜歡多個參數。我也嘗試使用partial,zip和lambda函數,但沒有一個似乎喜歡我的數組。
對於這種方法,我不是一成不變的。如果有更好的方法來做到這一點,我將不勝感激。一次只加載一個數據只需要很長的時間。我的計算表明,使用一個內核加載我的電腦需要大約3個小時。我會用盡我很多的記憶。我可以訪問另一臺擁有更多內核的機器,這實際上就是我要做這件事的地方,而且我想正確使用它們。