Schubbe
Сен. 13, 2010 17:39:08
Конструктор __init__ некоторого класса запускает дополнительный поток. Поток работает в бесконечном цикле по флагу. Предположил, что красиво было бы в деструкторе __del__ сбрасывать флаг и ожидать окончания потока. Но не тут то было. Деструктор просто перестал вызываться. Полагаю, что по причине наличия этого самого работающего потока. Как-нибудь можно это обойти или все же придется городить отдельный метод для остановки потока?
P.S. Python 2.7, WinXP
Андрей Светлов
Сен. 13, 2010 20:03:49
Прийдется городить. Это - принципиально.
Флажочек какой заведите. Или выкручивайтесь с weak reference. Явно - проще.
Schubbe
Сен. 14, 2010 10:41:06
Большое спасибо!
Действительно, передача потоку слабой ссылки на метод решила проблему.
Для этого я заменил:
threading.Thread(target=self.method)
на:
threading.Thread(target=weakref.ref(self.method))
Андрей Светлов
Сен. 14, 2010 18:59:29
Так-таки заработало? Не верю.
Хотя бы потому что weakref.ref потребует дополнительного вызова для получения сильной ссылки по слабой - чего я у вас не вижу.
Schubbe
Сен. 15, 2010 10:34:36
Вы правы. Перестал работать поток :(
Андрей Светлов
Сен. 19, 2010 07:58:54
Ну как, нашли решение?