@Batlab
PHP Senior | Python Middle | JS Junior

Зависает gui (pyqt5) при выполнении while / time.sleep. Что делать?

При нажатии на кнопку нужно в цикле while выполнить нужное количество запросов, вот код (сам блок кода, который выполняется при нажатии на кнопку):
# Начало залива
    def startJob(self):
        # Логи
        self.addLog('Сохраняем настройки...')
        
        # Настройки и переменные
        self.isJobStopped = False # Начинаем работу
        incr = 1 # Счетчик
        
        while incr <= self.spinBox.value(): # Начинаем выполнять запросы
            if self.isJobStopped == False:
                send_request = requests.post('https://youtube.com/example')
                self.addLog('Выполнено запросов: ' + str(incr) + '/' + str(self.spinBox.value()))
                incr += 1
            else:
                break
        self.addLog('Работа окончена.')


Если схожий код выполнить просто в cmd, то он при каждом запросе будет нормально выводить логи. Если такой код выполнять в контексте PyQt5, то программа зависает до тех пор, пока не выполнится весь while и в конце в один момент сразу выплевывает все логи.
Почему так происходит? Почитал в интернете, что такие конструкции мешают потоку GUI, из-за чего вызывается зависание. Как это обойти, что нужно сделать? Буду очень признателен за ответ.
  • Вопрос задан
  • 4169 просмотров
Решения вопроса 1
@Batlab Автор вопроса
PHP Senior | Python Middle | JS Junior
Проблема вроде-бы решена. С горем по полам создал отдельный поток обьекта QThread, в котором при запуске выполнялись все действия и отсылались сигналы в слот в UI потоке, где уже обрабатывались. Тему можно считать закрытой.
P.s. помогла вот эта тема https://nikolak.com/pyqt-threading-tutorial/
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
LazyTalent
@LazyTalent
Data Engineer, Freelancer
QTime или выполняешь цикл в другом треде
Ответ написан
Ваш ответ на вопрос

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

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