試圖將文件加載到python。這是一個非常大的文件(1.5Gb),但我有可用的內存,我只想做一次(因此使用python,我只需要對文件進行一次排序,所以python是一個簡單的選擇)。爲什麼加載這個文件需要這麼多的內存?
我的問題是,加載此文件導致方式以內存使用量過多。當我將大約10%的內容加載到內存中時,Python已經在使用700Mb,這顯然太多了。大約50%的腳本掛起,使用3.03 Gb的實際內存(並緩慢上升)。
我知道這不是排序文件(記憶方式)最有效的方法,但我只是想讓它工作,所以我可以繼續解決更重要的問題:D那麼,下面的python有什麼問題代碼是造成了大量的內存使用情況:
print 'Loading file into memory'
input_file = open(input_file_name, 'r')
input_file.readline() # Toss out the header
lines = []
totalLines = 31164015.0
currentLine = 0.0
printEvery100000 = 0
for line in input_file:
currentLine += 1.0
lined = line.split('\t')
printEvery100000 += 1
if printEvery100000 == 100000:
print str(currentLine/totalLines)
printEvery100000 = 0;
lines.append((lined[timestamp_pos].strip(), lined[personID_pos].strip(), lined[x_pos].strip(), lined[y_pos].strip()))
input_file.close()
print 'Done loading file into memory'
編輯:萬一有人是不確定,一般的共識似乎是,分配每個變量吃掉越來越多的內存。我在這種情況下通過1)調用readLines(),它仍然加載所有數據,但每行只有一個「字符串」變量開銷。這使用大約1.7Gb加載整個文件。然後,當我調用lines.sort()時,我將一個函數傳遞給在選項卡上分割的鍵並返回右列值,並將其轉換爲int。這在計算上是緩慢的,並且總體上需要大量的內存,但它起作用。學習了今天關於變量分配overhad的一噸:D
我想象的,因爲名單佔用更多的內存空間比其部分的總和。 – 2011-05-20 04:16:31
不夠公平,但我們正在談論〜比我預期消耗的內存多5倍。我不認爲他們花了太多的額外! – Hamy 2011-05-20 04:18:45
@哈米耶,它對我來說似乎有點多。 – 2011-05-20 04:20:43