Я написал скрипт, который считывает значения из текстового файла в объект словаря my_dict. У меня есть два файла, один 35 МБ, а другой 4,1 ГБ. В моей системе 8 ГБ памяти и обильный файл подкачки 32 ГБ.
Файлы выглядят примерно так:
dict_key_a 1,2,3,4,5,6 ...
dict_key_b 7,8,9,1, 2,3 ...
...
Вот функция, которую я использую для преобразования их в словари:
import os
import time
def unpack_dictionary(directory, verbose=False):
start_time = time.time()
if verbose:
print("[Reading data from file {}]".format(directory))
my_dict = dict()
file = open(directory)
count = 0
for line in file:
print(count)
count = count + 1 #I used this to figure out where it is stopping
id, data = line.split()
my_dict[id] = list(map(float, data.split(',')))
file.close()
file_size = os.path.getsize(directory)
if verbose:
print("[Finished reading {} GB in {} seconds]".format(file_size / 1000000000, round((time.time() - start_time), 3)))
return my_dict
Я работаю в Pycharm, и эта программа всегда быстро читает первый 35 МБ файл. Однако при чтении файла большего размера в 4 ГБ программа всегда останавливается на записи 4188.
Я попытался запустить с отладчиком, и программа работает нормально. Тем не менее, это занимает 20 ГБ моего файла подкачки, что кажется ненужным. Я ожидал максимум 8 ГБ (4 ГБ для чтения файла и 4 ГБ для словаря). Для чего можно использовать всю эту дополнительную память? Я не запускаю никаких других программ ...
В HTOP я вижу, что 86% моей памяти выделяется для виртуальной среды.
Когда я запускаю процесс из моей виртуальной среды, он достигает только 2352 ....
Python 3.6 64-бит в Ubuntu 18