python - 如何以真正的并发方式运行多个 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 真正并行性的理想最佳实践是什么?
解决方案
推荐阅读
- performance - 灯塔:结果之间的差异
- c# - WPF 画布平移和缩放
- python - Redis时间序列 - 汇总所有命中
- python - 如何在执行脚本之前自动清除 VSCode 中的终端?
- java - Java:ECDSA 签名验证返回不一致的结果
- python - 如何在 PyQt5 中获取当前关注的小部件对象名称?
- node.js - Ubuntu 18.04 Apache 在 AWS EC2 中自动为基于 NodeJS Angular 的应用程序频繁崩溃并停止
- .htaccess - 在使用 cPanel 的 Linux 主机中从 HTTP 重定向到 HTTPS 不起作用
- javascript - 如何在猫鼬中检索以一对多关系存储的文档
- javascript - 使用 Javascript 变量作为启动 mySQL 查询的 PHP 函数的参数的未捕获的 TypeError 消息