2024-09-28 22:23:08 发布
网友
我正在用PyQt编写一个应用程序,它接收8个传感器波形,我在一个窗口中有8个qgraphicsviews来流8个数据。当我只使用一个传感器时,一切正常。但是如果我使用所有8个实时流,绘图就会变慢并崩溃。在
当同时绘制大量实时流以减少性能时间时,最佳实践是什么?应该注意什么?多线程有帮助吗?以较慢的帧速率绘图?在
由于任务受CPU限制,而且您仍然在一个内核上运行(对于Python,默认情况下),多线程几乎没有什么用处。此外,PyQtGraph不能在多个线程中完成任何绘图:所有的工作都必须在主线程中完成(参见作者对类似主题here)的响应。因此,尽管多线程或多处理可以帮助您获取或处理数据,但它不能解决主要的瓶颈:在太小的空间中以太高的速率绘制过多的数据。在
解决方案?下采样。很方便,PyQtGraph有这个builtin。下面是一个示例(从PyQtGraph示例套件修改而来)。在
import numpy as np import pyqtgraph as pg from PySide import QtGui, QtCore win = pg.GraphicsWindow(title="Basic plotting examples") win.resize(1000,600) win.setWindowTitle('pyqtgraph example: Plotting') # Enable antialiasing for prettier plots pg.setConfigOptions(antialias=True) p1 = win.addPlot(title="Downsampled") # normally would plot 1000, but we downsample by 10 fold p1.plot(np.random.normal(size=1000), pen=(255,0,0), name="Red curve", downsample=10) p2 = win.addPlot(title="Normal") p2.plot(np.random.normal(size=1000), pen=(0,0,255), name="Blue curve",) ## Start Qt event loop unless running in interactive mode or using pyside. if __name__ == '__main__': QtGui.QApplication.instance().exec_()
结果,我们在左边少了10倍的分数,使得性能更高。在
由于任务受CPU限制,而且您仍然在一个内核上运行(对于Python,默认情况下),多线程几乎没有什么用处。此外,PyQtGraph不能在多个线程中完成任何绘图:所有的工作都必须在主线程中完成(参见作者对类似主题here)的响应。因此,尽管多线程或多处理可以帮助您获取或处理数据,但它不能解决主要的瓶颈:在太小的空间中以太高的速率绘制过多的数据。在
解决方案?下采样。很方便,PyQtGraph有这个builtin。下面是一个示例(从PyQtGraph示例套件修改而来)。在
结果,我们在左边少了10倍的分数,使得性能更高。在
相关问题 更多 >
编程相关推荐