Найти все ссылки на объект в python

Что такое хороший способ найти все ссылки на объект в python?

Причина, по которой я спрашиваю, заключается в том, что похоже, что у нас «утечка памяти». Мы загружаем файлы изображений на сервер из веб-браузера. Каждый раз, когда мы это делаем, использование памяти увеличивается на сервере, пропорционально увеличивается размер файла, который был только что загружен. Эта память никогда не освобождается сборкой мусора python, поэтому я думаю, что, вероятно, есть случайные ссылки, указывающие на данные изображения, которые не удаляются или не выходят за рамки, даже в конце каждого запроса.

Я считаю, что было бы неплохо спросить python: «Какие ссылки все еще указывают на эту память?» так что я могу выяснить, что держит сбор мусора от его освобождения.

В настоящее время мы запускаем Python и Django на сервере Heroku.

Любые предложения и идеи приветствуются, спасибо огромное!

2 Solutions collect form web for “Найти все ссылки на объект в python”

Стандартная библиотека Python имеет gc модуль, содержащий API-интерфейс сборщика мусора. Одна из функций, которую вы хотите получить, – это

 gc.get_objects() 

Эта функция возвращает список всех объектов, которые в настоящее время отслеживаются сборщиком мусора. Следующий шаг – проанализировать его.

Если вы знаете объект, который хотите отслеживать, вы можете использовать функцию getrefcount sys модуля:

 >>> x = object() >>> sys.getrefcount(x) 2 >>> y = x >>> sys.getrefcount(x) 3 

Модуль gc Python имеет несколько полезных функций, но похоже, что gc.get_referrers() – это то, что вы ищете. Вот пример:

 import gc def foo(): a = [2, 4, 6] b = [1, 4, 7] l = [a, b] d = dict(a=a) return l, d l, d = foo() r1 = gc.get_referrers(l[0]) r2 = gc.get_referrers(l[1]) print r1 print r2 

Когда я запустил это, я вижу следующий вывод:

 [[[2, 4, 6], [1, 4, 7]], {'a': [2, 4, 6]}] [[[2, 4, 6], [1, 4, 7]]] 

Вы можете видеть, что первая строка – l и d , а вторая – только l .

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

Interesting Posts

Как создать дополнительную страницу загрузки

Подсчет длинного появления повторяющейся последовательности в Python

Можно ли добавлять аддитивное смешение с matplotlib?

Matplotlib: изменить размер шрифта

как анализировать файл sitemap.xml с помощью XmlFeedSpider от scrapy?

Как вы получите следующее значение в последовательности с плавающей точкой?

Python NLTK pos_tag не возвращает правильный тег части речи

Как использовать assertJSONEqual от Django для проверки ответа на возвращаемый запрос JsonResponse

В python, как я могу загрузить sqlite db полностью в память, прежде чем подключаться к нему?

Ничего не сохраняется в django non-rel для движка Google

pandas: конвертировать datetime в конец месяца

Компиляция Python в собственный код?

Сообщите urllib2, чтобы использовать пользовательские DNS

Широковещательная передача с несколькими размерами

AttributeError: объект 'unicode' не имеет атрибута '_sa_instance_state'

Python - лучший язык программирования в мире.