Как в Python гарантировать вызов кода деструктора сразу после того, как экземпляр не нужен?
Вам нужно добавить функционал ContextManager для того, чтобы можно было использовать класс при помощи конструкции with. См. PEP 343.
А что мешает в конце функции добавить явное закрытие?