我使用 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/