Найти - Пользователи
Полная версия: Деструктор и многопоточность.
Начало » Python для новичков » Деструктор и многопоточность.
1
Schubbe
Конструктор __init__ некоторого класса запускает дополнительный поток. Поток работает в бесконечном цикле по флагу. Предположил, что красиво было бы в деструкторе __del__ сбрасывать флаг и ожидать окончания потока. Но не тут то было. Деструктор просто перестал вызываться. Полагаю, что по причине наличия этого самого работающего потока. Как-нибудь можно это обойти или все же придется городить отдельный метод для остановки потока?

P.S. Python 2.7, WinXP
Андрей Светлов
Прийдется городить. Это - принципиально.
Флажочек какой заведите. Или выкручивайтесь с weak reference. Явно - проще.
Schubbe
Большое спасибо!
Действительно, передача потоку слабой ссылки на метод решила проблему.
Для этого я заменил:
threading.Thread(target=self.method)
на:
threading.Thread(target=weakref.ref(self.method))
Андрей Светлов
Так-таки заработало? Не верю.
Хотя бы потому что weakref.ref потребует дополнительного вызова для получения сильной ссылки по слабой - чего я у вас не вижу.
Schubbe
Вы правы. Перестал работать поток :(
Андрей Светлов
Ну как, нашли решение?
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