Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 24, 2010 07:46:53

Evgeny
От:
Зарегистрирован: 2009-08-09
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Деструкторы

Столкнулся с ситуацией, в которой объекты ссылаются друг на друга, и, при выходе из программы,
их деструкторы не срабатывают. То есть не выполняются операторы в соотв. __del__(). Тут два вопроса:
- Таки программа “течет” или все же при выходе из интерпретатора срабатывает некий ReleaseAll?
- Какую тактику лучше использовать для отлова таких багов при отладке?



Офлайн

#2 Ноя. 24, 2010 10:47:49

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Деструкторы

1. Память течет. Объекты с __del__ не обрабатыватся garbage collector.
2. Не использовать __del__. Практически никогда не нужен. Подобие деструктора можно получить через weak reference с callback



Офлайн

#3 Ноя. 24, 2010 12:07:08

Evgeny
От:
Зарегистрирован: 2009-08-09
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Деструкторы

>> 1. Память течет. Объекты с __del__ не обрабатыватся garbage collector.

То есть, даже если __del__ срабатывает, объект не удаляется?

>> 2. Не использовать __del__. Практически никогда не нужен. Подобие деструктора можно получить через weak reference с callback

А он мне и не нужен. Вопрос в чем? Если объекты, ссылающиеся друг на друга не удаляются, то
нужно эти ситуации как-то отлавливать.



Офлайн

#4 Ноя. 24, 2010 17:49:48

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Деструкторы

http://www.python.su/forum/viewtopic.php?pid=20139#p20139 и вообще вся ветка обсуждения.

http://guppy-pe.sourceforge.net/ - профайлер памяти.



Офлайн

#5 Ноя. 24, 2010 20:44:35

Evgeny
От:
Зарегистрирован: 2009-08-09
Сообщения: 68
Репутация: +  0  -
Профиль   Отправить e-mail  

Деструкторы

Спасибо!



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version