Попытка загрузить файл в python. Это очень большой файл (1,5 ГБ), но у меня есть доступная память, и я просто хочу сделать это один раз (поэтому при использовании python мне просто нужно отсортировать файл один раз, чтобы python был легким выбором).
Моя проблема заключается в том, что загрузка этого файла приводит к значительному значительному использованию памяти. Когда я загрузил около 10% строк в память, Python уже использует 700 МБ, что явно слишком много. Примерно на 50% скрипт зависает, используя 3,03 Гб реальной памяти (и медленно растет).
Я знаю, что это не самый эффективный метод сортировки файла (с точки зрения памяти), но я просто хочу, чтобы он работал, чтобы я мог перейти к более важным проблемам: 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,7 Гб. Затем, когда я вызываю lines.sort (), я передаю функцию клавише, которая разделяется на вкладках и возвращает правильное значение столбца, преобразованное в int. Это медленно в вычислительном отношении и в целом требует много памяти, но работает. Сегодня много узнал о распределении переменных: D