Форум сайта python.su
Кто-нибудь пытался с этим разбираться? Обычно это не нужно, но сейчас работаю с обёрткой над C++ классами (Ogre3D), получается несколько объёмных объектов, которые не очень понятно как удалять. По идее деструктор должен вызываться, если не одна переменная больше на объект не ссылается, но “терзают смутные сомнения”, вдруг там циклические ссылки где-то спрятались. Как я могу проверить, освобождается память или нет?
Офлайн
посмотри модуль gc
Этот модуль предоставляет интерфейс к необязательному “сборщику мусора” (garbage
collector, GC): возможность отключить его, настроить частоту работы, установить отла-
дочные параметры, а также предоставляет доступ к “потерянным”1 объектам, найденным
“сборщиком мусора”, которые, однако, не могут быть удалены. Так как “сборщик мусо-
ра” дополняет механизм подсчета ссылок, уже используемый интерпретатором Python,
Вы можете отключить его, если уверены, что программа не создает циклических ссы-
лок. Автоматический сбор может быть отключен вызовом gc.disable(). Для поиска
утечек памяти при отладке, следует вызвать gc.set_debug(gc.DEBUG_LEAK).
Офлайн
создаём циклические ссылки
import gc
>>> class A:
pass
>>> a=A()
>>> b=A()
>>> a.d=b
>>> b.d=a
>>> a
<__main__.A instance at 0x012963C8>
>>> b
<__main__.A instance at 0x012963F0>
>>> a.d
<__main__.A instance at 0x012963F0>
>>> b.d
<__main__.A instance at 0x012963C8>
>>> gc.set_debug(gc.DEBUG_LEAK)
>>> del a
>>> del b
>>> gc.collect()
gc: collectable <A instance at 012963C8>
gc: collectable <dict 01290030>
gc: collectable <A instance at 012963F0>
gc: collectable <dict 01290A50>
4
>>> gc.garbage
Как я понимаю, надо добиваться, чтобы подобный код в программе всегда приводил к пустой gc.garbage. Видимо, такую проверку надо будет в программу вставить…
Офлайн
Используйте викрефы, и будет вам счастье :)
Офлайн
ofigetitelnoа что это такое?
Используйте викрефы, и будет вам счастье :)
Офлайн
Офлайн
pythonwinhttp://docs.python.org/lib/module-weakref.html
а что это такое?
Отредактировано (Апрель 3, 2007 13:52:53)
Офлайн
slivlen, OlDer спасибо за ссылки :)
тоже хотел запостить - не успел …
Офлайн
Спасибо всем! Про Weak Reference не знал раньше, классная штука.
Офлайн
кто сталкивался с утечками памяти в sqliobject, - пожалуйста, подскажите как решали проблему
Офлайн