2012-12-27 54 views
2

我的程序運行一個模擬,需要巨大的對象來存儲數據。blob的大小大於2-3GB。儘管我的MBP中應該有足夠的內存,python(Mac OS X上的Python 2.7.3,來自端口)似乎無法使用它,系統完全凍結。在python中處理巨大的數組

要保存模擬的狀態,我用泡菜,但也不會爲過大對象的工作,它好像泡菜將傾之前複製在內存中的對象...

問題:是否有一個標準庫可以處理巨大的Python數據結構(字典,集合,列表),而不需要一直保存在內存中?或者,有沒有辦法強制Python在虛擬內存中運行? (我對numpy不是很熟悉,會在這種情況下幫助我嗎?)

在此先感謝!

+1

您正在使用64位Python嗎? –

+0

您是否嘗試過不將所有數據存儲在一個對象中,而是將其保存爲磁盤上的文件並逐個讀取並逐步執行處理? –

+0

我知道它並沒有幫助你,但我昨天晚上用了一個6G元組列表的例子,python能夠處理沒問題,MacOS 10.8在這裏。所以這不是拉力python的問題,我猜。我的機器有20G的總內存。 – favoretti

回答

2

如果您使用的是64位版本的Python,但仍然遇到pickle或其他內置模塊的問題,您可以將Python對象存儲在面向對象的數據庫中。我們每天在這裏處理大型對象(〜10GB),並使用ZODB。這不是最快的,但完成了工作。

我也聽說dobbin可能是一個很好的選擇。

+0

謝謝,我會試試這個ZODB。在發佈這個問題之前,我最後的希望是cPickle,但它似乎和標準的python實現一樣存在相同的問題。 – Mkoch

+0

ZODB似乎已經解決了我的問題,儘管明天當計算成功結束時我纔會真正開心。 :) – Mkoch