Это продолжение ответа от stackoverflow от 2009
Как я могу явно освободить память в Python?
К сожалению (в зависимости от вашей версии и выпуска Python) некоторые
типы объектов используют "свободные списки", которые являются аккуратной локальной оптимизацией
но может вызвать фрагментацию памяти, в частности, делая больше и
больше памяти "выделено" только для объектов определенного типа и тем самым
недоступно «общему фонду».
Единственный действительно надежный способ обеспечить широкое, но временное использование
памяти возвращает все ресурсы в систему, когда это сделано, является
чтобы такое использование происходило в подпроцессе, который требует памяти
работа затем прекращается. В таких условиях операционная система БУДЕТ
выполнить свою работу и с радостью утилизировать все ресурсы, которые может выполнять подпроцесс
сожрал. К счастью, многопроцессорный модуль делает это
вид операции (которая раньше была довольно болезненной) не так уж плохо в
современные версии Python.
В вашем случае использования кажется, что лучший способ для подпроцессов
накапливать некоторые результаты и при этом обеспечить доступность этих результатов для
основной процесс заключается в использовании полу-временных файлов (по временным
значит, НЕ те файлы, которые автоматически исчезают при закрытии,
просто обычные файлы, которые вы явно удаляете, когда закончите
с ними).
Прошло 10 лет с тех пор, как я ответил, и мне интересно, есть ли лучший способ создать какой-нибудь процесс / подпроцесс / функцию / метод, который освобождает всю свою память после завершения.
Мотивация для этого - проблема, которая возникает у меня, когда forloop создает ошибку памяти, несмотря на отсутствие новых переменных.
Повторные вставки в базу данных sqlite через sqlalchemy, вызывающие утечку памяти?
Это вставка в базу данных. Я знаю, что не сама база данных вызывает ошибку памяти, потому что, когда я перезапускаю свою среду выполнения, база данных все еще сохраняется, но сбой не происходит до следующих нескольких сотен итераций цикла for.