我正在学习使用线程和GUI,因此,如果我弄乱了术语,请原谅。
我有一个应用程序,在该程序中,我正在监视套接字的数据并进行一些繁重的处理,然后再在GUI中显示结果:
我正在通过发出信号在线程之间传递数据。我想知道我的数据处理线程是否可以跟上传入的数据。
据我了解,当发出信号时,会将其放入所连接插槽的队列中。我尚未找到有关如何检查此队列长度以查看是否已备份的任何信息。
请参见以下示例:
显然正在备份数据,但是我如何获得有关仍需要处理多少事件的信息?
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_())