Форум сайта python.su
Есть GUI приложение для работы с VK API, в нем 2 потока(у каждого свои задачи) занимаються конкретно работой с API, 1 поток авторизацией(дабы не пихать ее в каждый поток).
И того, GUI поток пораждает 3 потока: Auth, Grab, Upload/
Класс Auth имеет сигнал AuthOk который возникает в случае успешной авторизации.
Теперь о проблеблеме:
При старте одного из потоков(Grab, Upload) им нужны данные для доступа ВК.(кукисы, access токен), по нажатию кнопки вызываеться метод Auth потока, который в случае успеха возбуждает сигнал AuthOk.
Сейчас используеться крайне коствльное решение для того чтобы ы слотек который вызываеться AuthOk были установлены данные для авторизации нужному потоку, и он был запущен\вызван нужный метод.
Сначала по нажатию кнопки старт, вызываеться метод который в GUI потоке устанавливает аттрибуту thr_to_start константу которая оозначает какой из потоков нуждаеться в данных для авторизации.
Дальше жуже в слоте приемнике сигнала AuthOk.
Происходит такой быдлокод:
if self.thr_to_start == ALBUM_THREAD: self.albums.vk.assign(self.auth.vk) #Присваиваем обьекту данные для авторизаци self.start_thread.connect(self.albums.parse_albums) #Ужс! Подкл специальный сигнал для запуска метода к нужному методу потока self.start_thread.emit() #И тут же его возбуждаем ...
Офлайн
Не понял зачем для аутентификации отдельный поток. Я бы сделал метод, get_auth_info() в котором происходила аутентификация и кешировался результат. Этот метод могли бы вызывать конкретные воркеры, все равно они в потоках, можно и блокировать один раз. Ну а сигналы использовал бы для отображения статуса/прогресса.
А вместо создания сигнала self.start_thread - каждый раз бы создавал поток через start(). Или соединял клик с методами наследника QObject, которого перенес в поток (moveToThread()).
Офлайн
Не понял зачем для аутентификации отдельный поток.
Офлайн