内存错误,是否有任何命令在程序执行结束时释放内存?

时间:2014-05-14 12:55:36

标签: python memory

我正在尝试优化我的程序,但我不能再简化它了。获得'记忆错误'

关于计划:

我正在操作大量数据,并且还使用scipy.interpolate在数据末尾获取所需的地图。并且还有最小的对象。

我的问题和尝试的解决方案:

我的程序令人惊讶地不会一直抛出任何“内存错误”,程序运行8/10次。此外,如果我关闭环境并再次运行它,它的工作完美。所以我想我会使用像gc.collect()这样的东西并没有帮助,是否有任何命令用于清除程序执行时的所有内存和变量,如在Matlab中?我是Python的新手。

谢谢!!

设置底图并将其缩放到兴趣点位置

m = basemap.Basemap( llcrnrlon = int(rec_long - 15), llcrnrlat = int(rec_lat - 15) ,
                    urcrnrlon = int(rec_long + 15), urcrnrlat = int(rec_lat + 15),   projection='merc', resolution = 'l' ,
                    lat_0 = rec_lat , lon_0 = rec_long )

m.drawcoastlines(ax=ax)
m.drawmapboundary(fill_color='0.3')
m.fillcontinents(color='gray', lake_color='aqua', ax=ax)
parallels=numpy.linspace(-90,90,6)
m.drawparallels(parallels, labels=[1,1,1,1], fontsize=10)
meridians=numpy.linspace(-180,180,6)
m.drawmeridians(meridians, labels=[1,1,1,1], fontsize=10)

我制作网格

grid_x,grid_y = numpy.meshgrid(lx,ly)

将IP_magnitude插入网格(x乘y尺寸)

z = scipy.interpolate.griddata((val_rt_long, val_rt_lat), val_rt_data ,(grid_x,grid_y) ,method='nearest')

x,y = m(grid_x,grid_y)

使用pcolormesh绘制幅度值

m.pcolormesh(x ,y , z, cmap=plt.cm.jet)

cb = m.colorbar(location='bottom',pad='7%')

1 个答案:

答案 0 :(得分:3)

你的内存不足,因为你的工作环境(Spyder)会记录一些数据,尽管你尝试使用gc.collect()。这就是这个环境的用途:你可能想要回到一些早期的结果,它们就在那里,由环境缓存。当您多次运行时,内存缓存会建立起来,并最终变满。

当你关闭Spyder时,操作系统会释放Spyder使用的所有内存,包括所有留在内存中进行检查的内存。这很明显:一旦你关闭了Spyder,你就无法从内存中检索这些数据:你必须重新打开数据文件并再次读入数据。

你说它作为单个脚本运行起来很大。这没有意义:你在问题中显示代码,而且实际上很少,并且Spyder中的代码行应该与独立脚本中的代码行相同。添加一些导入,您就可以了。

当独立运行时,操作系统会在每次脚本结束时释放已用内存。因此,没有数据将缓存在内存中,并且当多次运行时,内存(和数据)以空白平板开始。

你提到你是Python的新手,但习惯于Matlab。据推测,您总是从Matlab命令行运行东西。使用Python,尝试学习如何编写独立脚本,并从操作系统(终端)命令行运行这些脚本;在Python开发或探索环境中。您可以使用这些环境进行快速探索和反复试验,但对于完全成熟的数据处理,您最好不要运行独立脚本。