Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 内存错误,程序执行结束时是否有释放内存的命令?_Python_Memory - Fatal编程技术网

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

Python 内存错误,程序执行结束时是否有释放内存的命令?,python,memory,Python,Memory,我试图优化我的程序,但我不能再简化它了。获取“内存错误” 关于节目: 我正在对大量数据进行操作,并使用scipy.interpolate在数据末尾获取所需的贴图。还有最小的对象 我的问题和尝试的解决方案: 令人惊讶的是,我的程序没有一直抛出任何“内存错误”,程序运行了8/10次。另外,如果我关闭环境并再次运行它,它也可以完美地工作。所以我想我会使用类似于gc.collect()的东西,但它没有帮助,是否有任何命令可以在程序执行时清除所有内存和变量,就像在Matlab中一样??我是Python新手

我试图优化我的程序,但我不能再简化它了。获取“内存错误”

关于节目: 我正在对大量数据进行操作,并使用scipy.interpolate在数据末尾获取所需的贴图。还有最小的对象

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

谢谢

设置底图并将其缩放到关注点位置 我做网格 网格x,网格y=numpy.meshgrid(lx,ly)

将IP_幅值插值到栅格中(x x y尺寸) x,y=m(网格x,网格y)

使用pcolormesh绘制震级值
内存不足是因为您的工作环境(Spyder)跟踪某些数据,尽管您尝试使用
gc.collect()
。这就是这个环境的用途:您可能希望返回到一些早期的结果,它就在那里,由环境缓存。当您多次运行时,内存缓存会累积,并最终变满

关闭Spyder时,操作系统将释放Spyder使用的所有内存,包括保留用于检查的所有内存。这很明显:一旦关闭Spyder,就无法从内存中检索数据:必须重新打开数据文件并再次读取数据

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

独立运行时,每次脚本结束时,操作系统都会释放已用内存。因此,不会在内存中缓存任何数据,当多次运行时,内存(和数据)将以空白状态启动


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

您能给出一个内存不足的具体示例吗?“令人惊讶的是,我的程序没有一直抛出任何‘内存错误’,程序运行了8/10次”并没有真正的帮助。您是作为一个独立的脚本运行,还是在类似IPython环境的环境中运行;我要做的是重新启动内核,并确保没有其他内存密集型应用程序在运行,但我想知道Python中是否有“clear all”/“cls”类型的命令。“restart kernel”。因此,您正在IPython环境中运行,可能是通过IPython笔记本。最好提一下。您最好创建一个独立脚本,并将其用于此类内存密集型计算:一旦脚本完成,操作系统将清除所有内存,您可以再次运行它,而不必担心内存中的数据。除此之外,
del
gc.collect()
可以帮助您,但我不会依赖它,我是从spyder环境运行的,Python2.7是我使用的版本,我处理的数据文件是6.6MB。我有一个主脚本,我对5个子程序进行常规调用,设置底图、插值和绘图,只有在我开始对跨越30度、30度曲面的很长时间进行插值后,我才得到这个“内存错误”。。。。正如我前面提到的,使用gc.collect没有任何帮助。。。关于del是什么?谢谢你的回复,是的,我现在不知道如何形成一个独立的脚本。。。。我有很多导入模块,而且我粘贴的程序只是一些行来给出一个想法,而不是很多。。。
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)
z = scipy.interpolate.griddata((val_rt_long, val_rt_lat), val_rt_data ,(grid_x,grid_y) ,method='nearest')
m.pcolormesh(x ,y , z, cmap=plt.cm.jet)

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