BeautifulSoup4 сжирает оперативную память, что делать?
Целый день бился над вопросом, куда утекает оперативная память, причем буквально тает на глазах. Пока данных было не много, я этого не замечал. Однако решил для теста поработать с большим количеством данных и через несколько минут ноут завис вообще.
Отследил утечку до вызова soup = BeautifulSoup(html, 'html.parser')
Причем вне зависимости от метода его использования (через функцию, или внутри метода класса), эффект от его воздействия всегда одинаково пагубный. Я пытался понять в чём дело, и делал задержки времени до и после вызова, ещё отслеживал потребление памяти после выполнения метода который его задействует. И действительно, по окончанию работу немного RAM высвобождается, но судя по всему сам объект супа застревает.
gc.collect() не помог от слова совсем, где я его только не пробовал пихать (кроме материальных сущьностей =)
Скажу сразу что опыта у меня не много, аж в устроение утечек прям совсем ноль. Читал сегодня простыню на хабре по этому поводу, но в моём случае не помогло.
Возможно ли как-то принудительно выгрузить данные? Или быть можешь это только верхушка айсберга.
p.s Я грешил на экземпляр класса, что возможно именно из-за того что вызов происходит внутри метода класса, есть вероятность что он умирает именно там. И да, я пробовал делать del в конце вызова, никакого результата это не дало.
p.s.s При удалении экземпляра класса, память всё же высвобождается. Но для меня это увы не вариант, так-как нужно передать объект дальше.
Ну вот тут говорят page.decompose() разрушает обьект страницы.
Утечка памяти это когда программа никакой полезной работы не производит, а потребление памяти растет.
Тут я думаю нет утечки, а просто каждый цикл добавляет в память новые данные. И они не удаляются.
Очень надеялся что сработает но увы, комбинировал даже с gc.collect(), но результат тот же. Просто накапливается. Даже запарился и написал внешнюю функцию которая собирала сразу в себя, но всё равно остаётся мусор в памяти. Видимо всё же предаётся поменять реализацию.
Написано
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.