Striver
Апрель 2, 2007 14:32:05
Кто-нибудь пытался с этим разбираться? Обычно это не нужно, но сейчас работаю с обёрткой над C++ классами (Ogre3D), получается несколько объёмных объектов, которые не очень понятно как удалять. По идее деструктор должен вызываться, если не одна переменная больше на объект не ссылается, но “терзают смутные сомнения”, вдруг там циклические ссылки где-то спрятались. Как я могу проверить, освобождается память или нет?
pythonwin
Апрель 2, 2007 14:44:07
посмотри модуль gc
Этот модуль предоставляет интерфейс к необязательному “сборщику мусора” (garbage
collector, GC): возможность отключить его, настроить частоту работы, установить отла-
дочные параметры, а также предоставляет доступ к “потерянным”1 объектам, найденным
“сборщиком мусора”, которые, однако, не могут быть удалены. Так как “сборщик мусо-
ра” дополняет механизм подсчета ссылок, уже используемый интерпретатором Python,
Вы можете отключить его, если уверены, что программа не создает циклических ссы-
лок. Автоматический сбор может быть отключен вызовом gc.disable(). Для поиска
утечек памяти при отладке, следует вызвать gc.set_debug(gc.DEBUG_LEAK).
Striver
Апрель 2, 2007 15:12:04
создаём циклические ссылки
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
Апрель 3, 2007 13:07:37
Используйте викрефы, и будет вам счастье :)
pythonwin
Апрель 3, 2007 13:25:58
ofigetitelno
Используйте викрефы, и будет вам счастье :)
а что это такое?
slivlen
Апрель 3, 2007 13:48:36
OlDer
Апрель 3, 2007 13:52:08
pythonwin
а что это такое?
http://docs.python.org/lib/module-weakref.htmlХотел удалить, но не буду - все-таки у меня ссылка правильнее ;-)
pythonwin
Апрель 3, 2007 13:54:39
slivlen, OlDer спасибо за ссылки :)
тоже хотел запостить - не успел …
Striver
Апрель 4, 2007 09:08:13
Спасибо всем! Про Weak Reference не знал раньше, классная штука.
pythonwin
Апрель 4, 2007 15:00:03
кто сталкивался с утечками памяти в sqliobject, - пожалуйста, подскажите как решали проблему