python: 2.7
Ubuntu: 18.04
matpltolib: 2.2.2
我有一个客户端GUI,可从服务器获取信息并显示信息。我看到内存泄漏和CPU消耗随时间的变化。下图显示了使用GUI重新启动客户端后,CPU和内存利用率的变化(从右侧起约25秒,与网络流量的变化成正比)。
CPU图形的CPU使用率有所下降,表明在重新启动程序之前和之后CPU使用率是不同的。
“内存”图显示内存利用率大幅下降,然后由于同一程序的初始化而略有增加。
“网络”图出现峰值,因为客户端向服务器请求所有数据以进行可视化。
我怀疑这与matplotlib有关。我有7个数字,每3秒重新记录一次。
我已经添加了GUI的图像。中间的4个图是历史记录图。但是,由于我在该区域中有〜300像素,因此将所有数据点归为300个bin。合并在单独的线程中完成。存储信息的数据数组(2x1 000 000点,时间和值)从一开始就创建,以确保我的数据集增长时不会出现任何内存失控问题。我不希望数据集会超出此范围,因为典型实验的频率为0.1-0.01 Hz,这将需要几百万秒才能达到终点。
问题:如果是Matplotlib,我该怎么办?如果不是,那还能是什么?
于2018年9月6日添加: 我想到添加另一个示例。这是关闭GUI后CPU和内存使用情况的屏幕截图。该代码运行了大约3天。 Python 2.7,Ubuntu 18.04.1。
答案 0 :(得分:0)
谢谢大家,我们提供了有用的意见。 经过一番努力,我已经找到解决问题的方法。不幸的是,我对代码进行了几处更改,因此我不能确切地说出实际的帮助。
这是做什么:
所有图表均在单独的线程中完成。图像使用io.Bytes()作为字节流保存在缓冲区中,然后传递到GUI。这对我解决另一个问题(GUI freezes while charting with matplotlib)至关重要。
创建一个新图(图=图(figsize =(7,8),dpi = 80))。以前我一直在重复使用相同的图形(self.figure = Figure(figsize =(7,8),dpi = 80))。