Matplotlib:内存和'CPU'泄漏

问题描述 投票:0回答:1
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个区间。分箱在单独的线程中完成。存储信息的数据数组(2x1 000 000点,时间和值)从一开始就创建,以确保在我的数据集增长时没有任何内存失控问题。我不希望数据集增长超过这个数据集,因为典型的实验以0.1-0.01 Hz运行,这将花费数百万秒才能达到目的。

问题:如果是Matplotlib,我该怎么办?如果不是,那还有什么呢?

CPU and Memory consumption The GUI cnapshot

2018年9月6日补充说:我想添加另一个例子。以下是关闭GUI后CPU和内存使用情况的屏幕截图。代码运行了大约3天。 Python 2.7,Ubuntu 18.04.1。 CPU and Memory leak after 3 days

python-2.7 matplotlib ubuntu-18.04
1个回答
0
投票

谢谢大家的有益评论。经过一番努力,我找到了解决问题的方法。不幸的是,我在代码中做了一些更改,所以我不能肯定地说明实际上有什么帮助。

这里做了什么:

  1. 所有图表都在一个单独的线程中完成。使用io.Bytes()将图像作为字节流保存在缓冲区中,然后传递给GUI。这对我解决另一个问题很重要(GUI freezes while charting with matplotlib)。
  2. 每次生成绘图时,创建一个新图形(图=图(figsize =(7,8),dpi = 80))。以前我一直在重复使用相同的数字(self.figure = Figure(figsize =(7,8),dpi = 80))。
© www.soinside.com 2019 - 2024. All rights reserved.