__del__ это НЕ деструктор. Точне хоть в документации его так и называют, это не деструктор в привычном его понимании.
Во-первых время вызова этого метода не определено. Он может быть вызван как сразу после того как будет уничтожена последняя ссылка на объект, так и несколько позже. А может быть вообще не вызван.
It is not guaranteed that __del__() methods are called for objects that still exist when the interpreter exits.http://docs.python.org/3/reference/datamodel.html?highlight=__del__#object.__del__
Поэтому использовать метод __del__ для подчистки ресурсов категорически нельзя. Кроме этого с методом __del__ связано еще несколько нюансов с управлением памятью. И без крайней на то необходимости, кроме случая когда Вы точно уверены, что этот метод вам нужен, его обычно не используют.
Если необходимо ограничить время существования объекта и подчистить ресурсы за ним, лучше использовать context managers (конструкция with) или явно вызывать метод когда объект более не нужен.