考虑以下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,这在我看来显然表明存在某种内存泄漏。是这种情况,如果是这样的话 - 有没有办法绕过它(除了没有经络和平行线)?
谢谢!