Как запустить несколько PyQt QTimers в режиме истинного параллелизма? - PullRequest
0 голосов
/ 01 апреля 2019

Я хочу иметь два PyQt QTimers в моем приложении, где один выполняет обычные задачи, которые не требуют больших вычислений, но другой выполняет некоторую большую нагрузку.Два таймера должны работать независимо друг от друга, чтобы никто не вызывал задержку выполнения другого.

В настоящее время я инициализировал два периодических таймера, так что каждый из них срабатывает через 10 миллисекунд и вызывает соответствующую функцию слота.Код показан ниже:

from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication
from PyQt5.QtCore import QCoreApplication
import sys
import time


def first_timer_function():
    # Some heavy task to be performed in this function
    time.sleep(10)
    print "First Timer Fired"


def second_timer_function():
    # Regular tasks to be performed in this function
    print "Second Timer Fired"


if __name__ == "__main__":
    app = QCoreApplication.instance()
    if app is None:
        app = QApplication(sys.argv)

    first_timer = QTimer()
    first_timer.timeout.connect(first_timer_function)
    first_timer.start(10)

    second_timer = QTimer()
    second_timer.timeout.connect(second_timer_function)
    second_timer.start(10)

    sys.exit(app.exec_())

Таймер «first_timer» должен выполнить тяжелые вычисления, смоделированные 10-секундным сном.Когда я запускаю этот код, «second_timer» страдает от задержки, равной времени, затрачиваемому функцией слота «first_timer» для выполнения своей задачи.Я прочитал документацию по QTimers, и оказалось, что все QTimers выполняются в одном потоке, поэтому время выполнения «first_timer» задерживает «second_timer».

Должен ли я просто создать два отдельных потока, каждый из которых запускает один из этих таймеров.Что в идеале является наилучшей практикой для достижения истинного параллелизма QTimers?

...