Найти - Пользователи
Полная версия: Сборка мусора в Python
Начало » Python для экспертов » Сборка мусора в Python
1
Striver
Кто-нибудь пытался с этим разбираться? Обычно это не нужно, но сейчас работаю с обёрткой над C++ классами (Ogre3D), получается несколько объёмных объектов, которые не очень понятно как удалять. По идее деструктор должен вызываться, если не одна переменная больше на объект не ссылается, но “терзают смутные сомнения”, вдруг там циклические ссылки где-то спрятались. Как я могу проверить, освобождается память или нет?
pythonwin
посмотри модуль gc
Этот модуль предоставляет интерфейс к необязательному “сборщику мусора” (garbage
collector, GC): возможность отключить его, настроить частоту работы, установить отла-
дочные параметры, а также предоставляет доступ к “потерянным”1 объектам, найденным
“сборщиком мусора”, которые, однако, не могут быть удалены. Так как “сборщик мусо-
ра” дополняет механизм подсчета ссылок, уже используемый интерпретатором Python,
Вы можете отключить его, если уверены, что программа не создает циклических ссы-
лок. Автоматический сбор может быть отключен вызовом gc.disable(). Для поиска
утечек памяти при отладке, следует вызвать gc.set_debug(gc.DEBUG_LEAK).
Striver
создаём циклические ссылки

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
Используйте викрефы, и будет вам счастье :)
pythonwin
ofigetitelno
Используйте викрефы, и будет вам счастье :)
а что это такое?
slivlen
pythonwin
а что это такое?
Weak Reference, http://www.python.org/doc/2.4.4/api/weakref-objects.html
OlDer
pythonwin
а что это такое?
http://docs.python.org/lib/module-weakref.html
Хотел удалить, но не буду - все-таки у меня ссылка правильнее ;-)
pythonwin
slivlen, OlDer спасибо за ссылки :)
тоже хотел запостить - не успел …
Striver
Спасибо всем! Про Weak Reference не знал раньше, классная штука.
pythonwin
кто сталкивался с утечками памяти в sqliobject, - пожалуйста, подскажите как решали проблему
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB