所以我正在閱讀大量不同文件的大量數據。數據中有一個主要的速度障礙。問題是這些文件在它們的時間步的相應目錄中,其中包含該時間步的每個變量。所以基本上我有一些看起來像這樣的功能。內存錯誤並行Python(大數據並行)
def ReadFiles(path,points,directories,variables):
data = {}
for j in range(len(variables)):
data[variables[j]] = np.zeros((len(timeDirs),numPts))
for i in range(len(timeDirs)):
tfile = str(path) + "/" + str(timeDirs[i])
for j in range(len(variables)):
job_server.submit(ReadData,(args,data,i,j),modules=("np",))
def ReadData(args):
update path for the particular variable
read in data from file
data[variables[j]][i] = that data
TLDR初始化我有numpy的陣列劃分爲字典中的變量。然後更新並行化的另一個函數中的正確部分。
我正在使用並行python。我想在某個時候將這些代碼移到集羣中。我得到的錯誤是
File "/home/steven/anaconda2/lib/python2.7/site-packages/pp.py", line 460, in submit
sargs = pickle.dumps(args, self.__pickle_proto)
MemoryError: out of memory
從看我的內存使用情況,我可以看到,RAM上升,然後交換開始填充。一旦兩個都滿了,我得到錯誤。從一些閱讀中我收集到,這些過程中的每一個都正在傳遞一個新的字典,這意味着並行更新不是一種選擇。
我會注意到,當我串行運行時,我不會得到這個內存錯誤。那麼有沒有一種好方法可以將這些數據存儲或傳遞迴我的詞典?最終的數據存儲在一個hdf5文件中,但這些文件似乎並不想打開並寫入。
有沒有很好的解決方案?如何並行處理大量數據?
創建後轉儲字典很快。問題在於閱讀。我正在獨立閱讀每個數據文件。我只想平行閱讀這些內容。這看起來像是浪費了計算機的能力,只需讀取我的所有數據即可。 我將如何做一個內存映射? –
此外,正如我在操作中所說,我沒有在系列 –
內存錯誤您不會看到任何速度優勢並行讀取,如果你可以飽和I/O串行。這就是我提出這個建議的原因。如果您已經儘可能快地讀取儘可能多的數據,這不會浪費電腦的電量。 –