求助:关于在 pyqt5 中使用 pyqtgraph 模块绘制动态波形图电脑内存不断增加的问题

2020-11-24 17:13:01 +08:00
 ning2035
项目背景说明:这个项目是为了实现一个带上位机的电流表

项目涉及到的技术栈:1.模拟电流表的嵌入式软件,硬件
2.上位机界面:pyqt5+pyqtgraph
3.数据存储:mongodb

细节说明:本项目为一个单片机,通过串口每秒给上位机发送 1 帧数据,每 1 帧数据含 100 个 int 类型的数据,上位机从串口中收取单片机发送的数据,然后处理之后写入 mongodb,此为功能 1:写入数据库,问题就出现在第二个功能上,当从 mongodb 中查询数据,然后用 pyqtgraph 显示在界面上的时候,电脑的内存随着 pyqtgraph 显示的曲线增多而不断增加,目前测试是 1.5G 的数据,会使电脑占用的内存达到 90%,我电脑是 24G 内存,而且我查询数据的时候,不保存数据,仅显示,因为一开始全部查询上位机直接挂掉,所以现在循环查询,即从数据库中查询 100 个_ID(100 个文档的数据,我将默认的_id 存为从 1 开始的递加的序号了),然后用 pyqtgraph:self.plotWidget_max_load.plot(y=d, x=a, pen='b')(a,b 为同样长度的数组)显示出来,然后将 a,b 初始化,然后再查询,再显示,再初始化,循环,一开始的没有异样,但是随着显示的数据增多,内存开始增加,最后达到 90%,我有试过将上文显示的那条语句屏蔽掉,那么电脑的内存就不再增加,不管数据有再多,都不会增加.所以问题就出在那条语句上,但是真的不知道是 pyqt5 导致的呢,还是 pyqtgraph 导致的,我也试图百度过,谷歌过,但是能查到的资料都是类似于简单使用,而且一般的人也没有我样多的数据吧?所以考虑了很久都没有找到了答案.目前妥协的方式是,降低采样率,即 100 个点里选一个点,或者是 1000 个,10000 个点里采一个点,这样数据量很少,也不会增加内存了,但是长期挂测,还是会因为数据量过大,而出现上面描述的问题.


萌新不容易啊,好不容易,等了四个小时,才能提问,第一次提问以上有说的不明白的对方,还请见谅,希望各位大佬指教,谢谢
1094 次点击
所在节点    Python
0 条回复

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728792

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX