簡體   English   中英

內存錯誤並行Python(並行並行處理大數據)

[英]Memory Error Parallel Python (Large data in parallel)

因此,我正在從一堆不同的文件中讀取大量數據。 讀取數據是主要的速度障礙之一。 問題在於這些文件在其時間步長位於各自的目錄中,其中包含該時間步長的每個變量。 所以基本上我有一些看起來像這樣的功能。

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數組擁有的變量初始化為dict。 然后在並行化的另一個函數中更新正確的部分。

我正在使用並行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約束。 我將其切換為串行讀取數據,但是一旦加載了每個文件,便開始進行數據設置(並行,natch)。 如果您可以一次加載整個文件,然后從內存中對其進行處理,那么您可能會發現所尋求的性能有所提高,但會浪費內存。

如果要耗盡內存,則需要弄清楚如何隨手寫出一些數據,以便刪除這些字典條目。

內存映射文件而不是顯式讀取文件是可行的,然后並行處理可能更有意義,這取決於數據處理的速度與I / O的速度。 假設您在加載時進行數據處理需要足夠長的時間,這將使您能夠利用OS的調度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM