@s_hoffman

Как правильно построить связь между циклом событий и основным (не ассинхронным) циклом приложения?

В приложении pyqt5 есть поток, в котором запущен ассинхронный цикл.
class NewTaskHandler(QtCore.QThread):
    def __init__(self, parent=None):
        QtCore.QThread.__init__(self, parent)

    def run(self):
        asyncio.run(self.mainloop())


В mainloop происходят события, требующие передачи в основной поток приложения pyqt для дальнейшей обработки/сохранения в бд.

Мне бы хотелось избежать сложностей с базой данных внутри цикла событий (тк у меня нет в этом опыта) и передавать все результаты в основной поток.

Собственно вопрос:
- Допустимо ли использовать signal.emit() внутри цикла событий?
- Как вообще правильно построить связь между циклом событий и основным циклом приложения?
  • Вопрос задан
  • 176 просмотров
Пригласить эксперта
Ответы на вопрос 1
@shadrin_ss
Junior
Смотри в чем дело, ты думаешь перехитрить python но оказался раньше)

Если ты думаешь что в синхронном коде запускать асинхронный это верно, то ты не прав.
emit будет работать и в твой задаче это верное решение, но встает вопрос зачем тебе асинк тут, ты же будешь блокировать асинк и тем самым твои задачи выполняемые будут еще медленее.

Рекомендую в таком случае использовать другую связку, multiprocessing + qthread + qt
Создай поток в котором будет крутится твой таскер и через Pipe закидывай и получай задачи и ответы, это как вариант
Или же делай просто в синке, возможно есть что то в коробке у pyqt с асинком.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы