저는 8 개의 센서 파형을 받아들이는 PyQt에서 애플리케이션을 작성 중이며 8 개의 데이터를 스트리밍하는 하나의 창에 8 개의 QGraphicView가 있습니다. 하나의 센서 만 사용하면 모든 것이 잘 작동합니다. 그러나 8 개의 실시간 스트림을 모두 사용하면 플로팅이 느려지고 충돌합니다.
성능 시간을 줄이기 위해 동시에 많은 실시간 스트림을 플로팅 할 때 가장 좋은 방법은 무엇이며 무엇을 알고 있어야합니까? 멀티 스레딩이 도움이 될까요? 더 느린 프레임 속도로 플로팅?
작업이 CPU 바운드이고 여전히 하나의 코어 (기본적으로 Python의 경우)에서 실행 중이므로 다중 스레딩은 거의 사용되지 않습니다. 또한 PyQtGraph는 여러 스레드에서 플로팅을 수행 할 수 없습니다. 모든 것은 메인 스레드에서 수행되어야합니다 ( 여기 에서 유사한 주제에 대한 작성자의 응답 참조 ). 따라서 멀티 스레딩 또는 멀티 프로세싱이 데이터를 가져 오거나 처리하는 데 도움이 될 수 있지만, 너무 빠른 속도로 너무 작은 공간에 너무 많은 데이터를 플로팅하는 주요 병목 현상을 해결하지는 못합니다.
해결책? 다운 샘플링. 편리하게도 PyQtGraph에는이 내장 . 다음은 예제입니다 (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 배 적은 포인트가있어 훨씬 더 높은 성능을 제공합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다