Подтвердить что ты не робот

Диагностика утечки памяти в python

Я пытаюсь отладить утечку памяти в пакете Coopr, используя objgraph: https://gist.github.com/3855150

Я привязал его к объекту _SetContainer, но не могу понять, почему этот объект сохраняется в памяти. Здесь результат objgraph.show_refs:

show_refs

Как мне найти круговую ссылку и как я могу собрать сборщик мусора для сбора экземпляра _SetContainer?

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

4b9b3361

Ответ 1

В основном он угадывает вывод objgraph, но кажется, что экземпляр находится в цикле, а его класс имеет __del__. В этой ситуации объект сохраняется навсегда в CPython. Проверьте это:

import gc; gc.collect(); print gc.garbage

http://docs.python.org/library/gc.html#gc.garbage