首页 > 解决方案 > 如何以真正的并发方式运行多个 PyQt QTimers?

问题描述

我想在我的应用程序中有两个 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 的文档,结果发现所有 QTimer 在一个线程中运行,因此,“first_timer”的执行时间延迟了“second_timer”。

我是否应该只创建两个单独的线程,每个线程都运行其中一个计时器。实现 QTimers 真正并行性的理想最佳实践是什么?

标签: pythonpyqtpyqt5qtimer

解决方案


推荐阅读