PyQt:事件队列大小

时间:2018-08-06 06:48:35

标签: python pyqt pyqt5 qthread qt-signals

我正在学习使用线程和GUI,因此,如果我弄乱了术语,请原谅。

我有一个应用程序,在该程序中,我正在监视套接字的数据并进行一些繁重的处理,然后再在GUI中显示结果:

  • thread1监视套接字中的传入数据
  • thread2处理数据
  • thread3 GUI线程

我正在通过发出信号在线程之间传递数据。我想知道我的数据处理线程是否可以跟上传入的数据。

据我了解,当发出信号时,会将其放入所连接插槽的队列中。我尚未找到有关如何检查此队列长度以查看是否已备份的任何信息。

请参见以下示例:

  • 每0.5秒生成一次数据
  • 每1.0秒处理一次数据

显然正在备份数据,但是我如何获得有关仍需要处理多少事件的信息?

from PyQt5.QtCore import QObject, QThread, QTimer
from PyQt5.QtCore import pyqtSlot, pyqtSignal
from PyQt5.QtWidgets import QMainWindow
import numpy as np

class Worker(QObject):

    dataready = pyqtSignal(np.ndarray)

    def __init__(self, timer_len=500):
        super(Worker,self).__init__()

        self.timer_len = timer_len

    def run(self):
        self.timer = QTimer()
        self.timer.timeout.connect(self.work)
        self.timer.start(self.timer_len)

    def work(self):
        print('received new data!')
        data = np.random.rand(10)
        self.dataready.emit(data)

if __name__ == "__main__":
    import sys
    import time
    from PyQt5.QtWidgets import QApplication

    app = QApplication([])

    @pyqtSlot(np.ndarray)
    def processdata(arr):
        time.sleep(1.0) # process data every 1000ms
        print(arr)

    thread = QThread()

    worker = Worker(timer_len=500) # generate new data every 500ms
    worker.dataready.connect(processdata)
    worker.moveToThread(thread)

    thread.started.connect(worker.run)
    thread.start()

    sys.exit(app.exec_())

0 个答案:

没有答案