python - 需要帮助识别涉及 matplotlib 和 Flask 的内存泄漏

标签 python sqlite matplotlib mod-wsgi flask

我使用 Flask 框架编写了一个小型 Web 应用程序,其中涉及使用 matplotlib 进行绘图。问题是每次我创建绘图时,该过程都会消耗更多内存。

我已经使用 mod_wsgi 部署了该应用程序,其 .wsgi 文件如下所示:

from yourapplication import app as application

当我访问创建绘图的 url 时,问题就开始了。该函数创建一个绘图仪对象,初始化时,该对象从 sqlite3 数据库获取相关数据(数据由大约 30 个整数和同样数量的日期时间对象组成),使用 matplotlib 创建绘图并返回一个 StringIO 对象,然后该对象显示在屏幕上。

函数到此结束。全类可见here

    canvas = FigureCanvas(fig)
    png_output = StringIO.StringIO()
    canvas.print_png(png_output)
    return png_output.getvalue()

当我访问该站点时,会创建一个进程,并保留大约 25MB 的内存。我第一次创建绘图时,它会增长到 30MB,然后每次使用绘图仪类时都会增长约 1MB。默认设置使用 5 个进程,这消耗了太多内存(几分钟内就达到了 150MB,而我只允许使用 80MB)。

我对这里涉及的所有事物(Web 框架、apache、数据库)都很陌生,所以我不知道事情可能会出错,所以任何想法都受到高度赞赏。谢谢!

最佳答案

每次调用 plot_month 函数后执行此操作可以解决泄漏问题。

import gc
gc.collect()

关于python - 需要帮助识别涉及 matplotlib 和 Flask 的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7740832/

相关文章:

sqlite - 编辑只读 View

SQLite:如何使用复合键从单个表中选择 "most recent record for each user"?

python - 如何解决 Python 线程中这种奇怪的 MySQL 锁定行为?

javascript - 如何查看/抓取隐藏在页面源代码中的真实文本值?

python - Numpy:在数组上施加行依赖最大值

matplotlib - 在 PyQt4 中的嵌入式 matplotlib 图中使用 ginput

python - 如何在 Matplotlib 的堆叠水平条形图中显示数据值

Python 使用 boto 在同一个 S3 Bucket 中移动/复制文件

java - Android SQLite数据库版本,更改结构现在无法查看DB

python - 如何在 seaborn 中将 groupby 绘制为百分比?