Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 13, 2010 17:39:08

Schubbe
От:
Зарегистрирован: 2010-09-13
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Деструктор и многопоточность.

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

P.S. Python 2.7, WinXP



Офлайн

#2 Сен. 13, 2010 20:03:49

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

Деструктор и многопоточность.

Прийдется городить. Это - принципиально.
Флажочек какой заведите. Или выкручивайтесь с weak reference. Явно - проще.



Офлайн

#3 Сен. 14, 2010 10:41:06

Schubbe
От:
Зарегистрирован: 2010-09-13
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Деструктор и многопоточность.

Большое спасибо!
Действительно, передача потоку слабой ссылки на метод решила проблему.
Для этого я заменил:

threading.Thread(target=self.method)
на:
threading.Thread(target=weakref.ref(self.method))



Отредактировано (Сен. 15, 2010 14:47:27)

Офлайн

#4 Сен. 14, 2010 18:59:29

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

Деструктор и многопоточность.

Так-таки заработало? Не верю.
Хотя бы потому что weakref.ref потребует дополнительного вызова для получения сильной ссылки по слабой - чего я у вас не вижу.



Офлайн

#5 Сен. 15, 2010 10:34:36

Schubbe
От:
Зарегистрирован: 2010-09-13
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Деструктор и многопоточность.

Вы правы. Перестал работать поток :(



Офлайн

#6 Сен. 19, 2010 07:58:54

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

Деструктор и многопоточность.

Ну как, нашли решение?



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version