【发布时间】:2017-03-04 07:28:23
【问题描述】:
如何使用主线程中运行的程序中的数据绘制两个实时更新的图?
我尝试在 PyQTGraph 中使用 QApplication 类,但 QApplication.exec() 函数会阻塞主程序执行,也不能在线程上运行。
这三个问题的答案可能会有所帮助:
1) 是否有另一个python可视化库/API不需要使用主线程来绘制对象但速度足以绘制实时绘图?
2) 使用 Python 的多处理功能如何做到这一点?我刚刚学会了线程,所以多处理似乎令人生畏。在主程序和另一个处理更新图之间传递数据需要哪些代码行?
3) 多处理是否足够快,可以在一个进程中从主进程更新实时绘图?
非常感谢您提前提供的任何帮助。
【问题讨论】:
-
多处理是您唯一的选择。是否足够快取决于(您的绘图数据的)数据速率、您想要一次显示多少个点、您想要更新图表的频率以及您的 PC 的速度。如果我没记错的话,pyqtgraph 内置了多处理支持。我认为它在示例应用程序中的一个示例中得到了证明。
-
我应该详细说明,多处理是您唯一的选择,因为 Python GIL 确保一次只运行一个线程。无论如何,所有基于 Qt 的图形库都必须在主线程中绘制。
-
感谢您的回复。它证实了我必须使用多处理的预感。除非有更简单的方法,否则我计划使用套接字进行进程间通信。
-
套接字(python 原始套接字或 pyzmq)可以工作。如果您不希望套接字通信减慢主进程的速度,zmq pub/sub 套接字可能是一个不错的选择。或者,python 多处理库有一个队列对象可以做到这一点。同一个库中可能还支持共享内存(尽管您的里程可能因平台而异)
标签: python matplotlib multiprocessing real-time pyqtgraph