Установка:
Я использую код Python, где:
- Я открываю файл.
- Для каждой строки в файле я создаю объект
- Выполнить некоторые операции с объектом
Обратите внимание, что, как только я закончу с операцией, мне больше не нужен объект. Каждая новая строка независима.
Соответствующий код согласно запросу:
Я прокомментировал все части моего кода, оставив ниже следующий код:
import gc
for l in range(num_lines):
inp = f.readline()[:-1]
collector = [int(i) for i in inp]
M = BooleanFunction(collector)
deg = M.algebraic_degree()
del M
gc.collect()
Проблема :
Объект, однажды созданный, потребляет некоторое количество памяти. После выполнения операций я не могу его освободить. Поэтому при циклическом перемещении файла моя память продолжает накапливаться новыми объектами, и примерно на 793 строки в файле мои 16 ГБ ОЗУ полностью истощаются.
Что я пробовал:
Использование сборщика мусора:
import gc
del Object
gc.collect()
Однако сборщик мусора не освободит ОЗУ (или) питон не отдает память системе. Создание дочерних процессов - идея, но не то, ради чего я готов.
Вопросы:
- Можно ли как-нибудь освободить всю память, занимаемую программой в данный момент, для ОС? Это означает удаление всех переменных (циклических переменных, глобальных переменных и т. Д.). Что-то похожее на то, что происходит, когда вы нажимаете CTRL + C для завершения программы, она возвращает всю память в ОС.
- Способ специально отменить выделение объекта (если я делаю это неправильно).
Предыдущие вопросы не отвечают на вопрос, что если gc.collect () не может это сделать, и как мне полностью отказаться от выделенной памяти.