Использование `multiprocessing` по-прежнему самый простой способ сделать подпроцесс make, который освобождает всю память после завершения? - PullRequest
0 голосов
/ 07 июня 2019

Это продолжение ответа от stackoverflow от 2009

Как я могу явно освободить память в Python?

К сожалению (в зависимости от вашей версии и выпуска Python) некоторые типы объектов используют "свободные списки", которые являются аккуратной локальной оптимизацией но может вызвать фрагментацию памяти, в частности, делая больше и больше памяти "выделено" только для объектов определенного типа и тем самым недоступно «общему фонду».

Единственный действительно надежный способ обеспечить широкое, но временное использование памяти возвращает все ресурсы в систему, когда это сделано, является чтобы такое использование происходило в подпроцессе, который требует памяти работа затем прекращается. В таких условиях операционная система БУДЕТ выполнить свою работу и с радостью утилизировать все ресурсы, которые может выполнять подпроцесс сожрал. К счастью, многопроцессорный модуль делает это вид операции (которая раньше была довольно болезненной) не так уж плохо в современные версии Python.

В вашем случае использования кажется, что лучший способ для подпроцессов накапливать некоторые результаты и при этом обеспечить доступность этих результатов для основной процесс заключается в использовании полу-временных файлов (по временным значит, НЕ те файлы, которые автоматически исчезают при закрытии, просто обычные файлы, которые вы явно удаляете, когда закончите с ними). ​​

Прошло 10 лет с тех пор, как я ответил, и мне интересно, есть ли лучший способ создать какой-нибудь процесс / подпроцесс / функцию / метод, который освобождает всю свою память после завершения.

Мотивация для этого - проблема, которая возникает у меня, когда forloop создает ошибку памяти, несмотря на отсутствие новых переменных.

Повторные вставки в базу данных sqlite через sqlalchemy, вызывающие утечку памяти?

Это вставка в базу данных. Я знаю, что не сама база данных вызывает ошибку памяти, потому что, когда я перезапускаю свою среду выполнения, база данных все еще сохраняется, но сбой не происходит до следующих нескольких сотен итераций цикла for.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...