2016-01-27 62 views
1

我正在編寫Python代碼,它逐漸構造一個大字典(6億個元素),同時不斷從字典中讀取。我經常使用cPickle將這個對象寫到一個文件中,然後從文件中讀取,從中斷的地方繼續。對象大於RAM

到此爲止,字典將佔用大約40 GB。我的電腦有16 GB的RAM。我應該期待什麼行爲?內存錯誤?冷凍電腦?訪問字典的速度非常慢?

此外,我試圖修復我的替代實現(一個NumPy數組而不是字典),預計只需要5 GB,但也要運行三次左右。我是否正確地認爲,保持在16 GB以內的恆定內存訪問將使NumPy版本實際運行得更快?

+2

期待「數據庫安裝」;) – furas

回答

2

有一次你會用完RAM,你的代碼會崩潰。

在您到達該階段之前,您的系統可能會放慢速度,因爲它將開始交換。

對於如此大量的數據,您應該使用一些可以讓您存儲數據但不將所有數據保存在內存中的東西,例如數據庫(sqlite很容易入手)。

另一個警告:如果您的源數據在某個文件中並且具有一定的大小,那麼預計Python將需要更多的內存來處理它,因爲它必須爲它創建一些結構(如字典)。

0

你能在現代操作系統上用完RAM嗎?

如果你有16Gb,可用的更少,因爲操作系統正在使用一些。但是,虛擬內存應該使這個更大,但性能可能會受到影響。

相關問題