Qt/PySide6: Как лучше всего реализовать бесконечный цикл выборки данных с помощью QThread?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Qt/PySide6: Как лучше всего реализовать бесконечный цикл выборки данных с помощью QThread?

Сообщение Anonymous »

Я реализую небольшое многопоточное приложение с графическим интерфейсом с помощью PySide6 для получения данных с датчика (подключенного через USB) и визуализации данных с помощью Qt. То есть использование может запускать и останавливать получение данных:
Изображение

При нажатии кнопки воспроизведения создается рабочий объект, который перемещается в QThread и запускается QThread. В Интернете полно разных подходов к реализации такого неопределенного цикла (цикла выборки данных). Вот два основных подхода, с которыми я сталкивался чаще всего:
  • Подход 1 (неопределенный, но прерываемый пользователем цикл плюс сон()< /code>):

Код: Выделить всё

class Worker(QObject):
def __init__(self, user_stop_event: Event)
self.user_stop_event = user_stop_event

def run(self):
while not user_stop_event.isSet():
self.fetch_data()
# Process received signals:
Qtcore.QApplication.processEvents()
# A sleep is important since in Python threads cannot run really in parallel (on multicore systems) and without sleep we would block the main (GUI) thread!
QThread.sleep(50)

def fetch_data(self):
...
  • Подход 2 (подход на основе таймера):

Код: Выделить всё

class Worker(QObject):
def __init__(self):
timer = QTimer()
timer.timeout.connect(self.fetch_data)
timer.start(50)

def fetch_data(self):
...
Оба варианта используют один и тот же механизм запуска потока:

Код: Выделить всё

thread = QThread()
worker = Worker()
worker.moveToThread(thread )
thread.started.connect(worker.run)
...
Каковы плюсы и минусы обоих подходов? Какова предпочтительная реализация?
К сожалению, официальный веб-сайт Qt по основам потоковой обработки не дает здесь четких советов. Оба работают на моей стороне, но я не совсем уверен, какой из них будет использоваться в реализации по умолчанию для последующих проектов.

Подробнее здесь: https://stackoverflow.com/questions/790 ... g-loop-wit
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»