小编Dav*_*ide的帖子

for 循环中的 Matplotlib 和 python 垃圾收集

我需要使用 Python 和 Matplotlib 导出多个图,但我在内存管理方面遇到了问题。

我在 Windows 中使用 Jupyter Notebook,代码的结构如下面的工作示例所示。基本上,我在几年的时间内每天生成一个情节。

根据内存使用情况,我可以看到,通常在前 4 个“月”内,内存使用量相当稳定,但随后每个“天”都会增加超过 15MB。对于完整的代码,这会导致内存错误。

我尝试plt.close()按照此处的建议使用。我也尝试过plt.close(fig)plt.close('all')并手动删除一些变量del。最后我gc.collect进入了循环。似乎没有任何效果。

import numpy as np
import matplotlib.pyplot as plt
import gc

sz = 1000
i=0
for year in [2014,2015,2016,2017]:
    for month in [1,2,3,4,5,9,10,11,12]:
        for day in range(1,30):

            # Plot
            fig, ((ax1,ax2),(ax3,ax4)) = plt.subplots(2,2,figsize=(14,10))

            x1 = np.arange(1,sz+1,1)
            y1 = np.random.random(sz)
            ax1.scatter(x1,y1)
            ax2.scatter(x1,y1)
            ax3.scatter(x1,y1)
            ax4.scatter(x1,y1)

            filename = 'test/test_output{}{}{}.png'.format(year,month,day)
            plt.tight_layout()
            plt.savefig(filename, bbox_inches='tight')

            #plt.close(fig)            
            #plt.close('all')
            plt.close()

            del x1, …
Run Code Online (Sandbox Code Playgroud)

python garbage-collection memory-management matplotlib

5
推荐指数
0
解决办法
549
查看次数