matplotlib 当重复请求时,内存使用量不断增加

332nm8kg  于 2023-05-18  发布在  其他
关注(0)|答案(1)|浏览(159)

最近我正在编写一个数据库web服务器,我遇到了一些关于Django工作机制的问题。我在www.example.com中有一个函数view.py,如下所示:

@api_view(['GET'])
def general_plot_strip(request,gene_name,format = 'image/png'):
    pl = GenePlot(gene_name)
    if request.method == "GET":
        ### here stripplot() is a plot function
        fig = pl.stripplot()
        buf = io.BytesIO()
        fig.savefig(buf, format='png')
        plt.close('all')
        buf.seek(0)
        gc.collect()
        return FileResponse(buf, content_type='image/png')

这在运行python manage.py runserver时可以很顺利地运行,但是当我多次请求相应的url时,内存使用量只会上升,而且不会下降。这是一个例子,当我尝试请求URL两次。

knpiaxh1

knpiaxh11#

尝试使用上下文管理器“with”语句。

@api_view(['GET'])
def general_plot_strip(request,gene_name,format = 'image/png'):
    pl = GenePlot(gene_name)
    if request.method == "GET":
        fig = pl.stripplot()
        with io.BytesIO() as buf:
          fig.savefig(buf, format='png')
          plt.clf() # clear the current figure...
          plt.close('all')
          buf.seek(0)
          gc.collect()
          return FileResponse(buf, content_type='image/png')

相关问题