LINUX.ORG.RU

python странная утечка памяти

 , ,


2

3

Имеется утечка памяти в программе, делал специально мультипроцессорность чтобы от них всех разом избавиться.

Ситуация выглядит так, я в целях отладки запускаю посредством IDLE главный скрипт, затем делаю что надо, на выходе получаю сожранный 1gb оперативной памяти. Если затем программу закрыть и ввести в консоли IDLE команду:

gc.collect()
То потребление падает до приемлимых 50mb.

Выходит утечка и есть, потому что я её вижу, и в то же время её будто и нет, так как сборщик мусора всё нормально убирает когда я руками его вызываю. Вот только сборщик мусора сам по ходу работы похоже за собой не хочет убираться.

Я пробовал в середине скрипта втыкать в определённых местах эту команду чистки мусора, но программа начинает очень медленно от этого работать, производительность падает по ощущениям раз в 20. Такое мне не подходит.

Что тут можно придумать? В питоне я достаточно неопытен, программа имеет гуй и работу с сетью, я сейчас рассматриваю возможность гуй оторвать от воркеров и наладить с ними общение посредством message broker или чего-то такого основанного на сообщениях, чтобы скрипты все были отделены напрочь друг от друга. Хотелось бы конечно как-то всё на текущем уровне исправить. Прошу совета у бывалых форумчан.


Ответ на: комментарий от anonymous

Анон, что означает фраза «отдаёт только под оффтопиком»? Не понимаю контекста что есть оффтопик в данном случае, ссылку изучаю, спасибо

rubro
() автор топика
Ответ на: комментарий от anonymous

Спасибо за совет, я правильно понимаю что weak reference работает так что мы указываем 1 жёсткую ссылку и множество weak ссылок, а затем по любой из них через del удаляем объект и память освобождается?

Почему спрашиваю, ещё слышал что вроде как автоматически питон это умеет делать без необходимости самому DELетить

rubro
() автор топика

код не видел, но есть подозрение на создание больших списков и прочего. Может есть возможность yieldить.

krasoffski
()
Ответ на: комментарий от krasoffski

Да похоже именно то, куча тяжёлых объектов в списках, и даже если грохнуть этот список и всё что к нему относится - память всё равно не высвободит. Освободится память лишь когда я выйду из этой функции, вот тогда всё будет нормально, но мне надо внутри неё находится и освободить там память.

rubro
() автор топика

Народ поясните пожалуйста по слабыми ссылкам (weak references).

Я правильно понял что вся их суть в том что делается 1 обычная ссылка и множество слабых, и при необходимости мне достаточно сделать DEL основной ссылки и в этом вся их сила?

rubro
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.