底图中可能的内存泄漏

时间:2014-06-06 17:02:20

标签: python memory-leaks matplotlib-basemap

考虑以下Python程序:

import sys
from mpl_toolkits.basemap import Basemap
import matplotlib.pyplot as plt
import numpy as np
from matplotlib.backends.backend_pdf import PdfPages

for i in range(1):
    pp=PdfPages('test.pdf')
    pindex=0
    pages=10
    rows=6
    cols=3
    for p in range(pages):      # for each page
        fig=plt.figure(figsize=[8.5, 11])   # letter size
        plt.axis('off')
        for r in range(rows):       # for each row
            for c in range(cols):       # for each column
                fig.add_subplot(rows, cols, 1+c+r*cols)
                map=Basemap(projection='cyl', resolution='c')
                map.drawcoastlines(linewidth=.25)
                map.drawparallels(np.arange(-90, 90, 30), linewidth=.25)
                map.drawmeridians(np.arange(-180, 180, 30), linewidth=.25)
        pp.savefig()
        pindex=pindex+1
    pp.close()
print 'done'
sys.stdin.readline()

这个简单程序的作用是创建一个包含10页的PDF文件,并在每个页面中创建一个地图图(6x3)数组。当我运行这个程序时,程序打印“完成”时内存使用量会达到几千兆字节,即使生成的实际文件只是其中的一小部分。在评论对drawparallels和drawmeridians的调用时,内存使用率要低得多。相反,我将主循环的范围从1更改为5(基本上重复创建相同的文件5次),然后内存使用量达到数十GB,这在我看来显然表明存在某种内存泄漏。是这种情况,如果是这样的话 - 有没有办法绕过它(除了没有经络和平行线)?

谢谢!

0 个答案:

没有答案