Я открываю файл 3 ГБ в Python для чтения строк. Затем я сохраняю эти данные в словаре. Моя следующая цель - построить график с использованием этого словаря, чтобы я внимательно следил за использованием памяти.
Мне кажется, что Python загружает весь 3 ГБ файл в память, и я не могу избавиться от него. Мой код выглядит следующим образом:
with open(filename) as data:
accounts = dict()
for line in data:
username = line.split()[1]
IP = line.split()[0]
try:
accounts[username].add(IP)
except KeyError:
accounts[username] = set()
accounts[username].add(IP)
print "The accounts will be deleted from memory in 5 seconds"
time.sleep(5)
accounts.clear()
print "The accounts have been deleted from memory"
time.sleep(5)
print "End of script"
Последние строки есть, чтобы я мог контролировать использование памяти. В памяти script используется бит более 3 ГБ. Очистка словаря составляет около 300 МБ. Когда конец script завершается, остальная часть памяти освобождается.
Я использую Ubuntu, и я отслеживал использование памяти, используя "Системный монитор" и "Свободную" команду в терминале.
Я не понимаю, почему Python нуждается в такой большой памяти после того, как я очистил словарь. Сохраняется ли файл в памяти? Если да, то как я могу избавиться от него? Это проблема с тем, что моя ОС не видит освобожденную память?
EDIT: я попытался заставить gc.collect() после освобождения словаря, безрезультатно.
EDIT2: я запускаю Python 2.7.3 на Ubuntu 12.04.LTS
EDIT3: Я понимаю, что забыл упомянуть что-то очень важное. Моя реальная проблема заключается не в том, что моя ОС не "возвращает" память, используемую Python. Впоследствии Python не повторяет использование этой памяти (он просто запрашивает больше памяти для ОС).