Pyqt5 понимание Qtimer

это вопрос для понимания QTimer. Я создаю событие QTimer(), которое запускает функцию каждые 1000 мс. Эта функция действует до тех пор, пока работает графический интерфейс. Итак, я использовал QTimer() в основном потоке (поток GUI), я не создавал QThread для этого события таймера. Мои вопросы:

1- Влияет ли использование QTimer в потоке графического интерфейса (основной поток) на функциональность графического интерфейса в любое время?

2- Вы рекомендуете создать QThread и запускать на нем это событие таймера, или оно того не стоит и лучше поберечь ресурсы. если да, не могли бы вы предоставить мне, как переместить этот таймер на QThread?


person Zidan Shafik    schedule 08.05.2020    source источник


Ответы (2)


  1. Если вы хотите выполнять периодическую задачу, QTimer — лучший вариант, а логика QTimer заключается в использовании цикла событий Qt для проверки, срабатывает он или нет. Вместо этого вы должны беспокоиться о функции, которую выполняет QTimer, поскольку в целом любая функция, связанная с сигналом, не должна занимать много времени, и это задача разработчика.

  2. В общем, вам следует избегать использования потоков, поскольку они добавляют больше сложности и, возможно, больше проблем. Таким образом, единственная причина, по которой потоки являются альтернативой, - это когда задача требует очень много времени. В заключение: использование или неиспользование потока зависит не от QTimer, а от выполняемой вами задачи.

Если вы собираетесь выполнять периодическую задачу, то есть много альтернатив (не только QThread), но функциональность зависит от конкретной задачи:

  • threading.Timer

  • Создайте QObject, который живет во вторичном потоке, и вызовите его с помощью QTimer (здесь условие состоит в том, что время задачи намного меньше, чем период QTimer)

  • Используйте QThreadPool, который запускает QRunnable с QTimer (QThreadPool может иметь максимальное количество активных runnables)

person eyllanesc    schedule 08.05.2020

Ответ Эдвина лучший, но я бы отослал вас к проблеме, которую я решил несколько недель назад: Поток Python Timer не завершается с помощью ярлыка на рабочем столе

person John    schedule 11.05.2020