使用xarray数据集时如何减少/释放内存?

问题描述

这是我的代码中使用xarray(v.0.16.1)数据集的函数的内存分析器的输出

Line #    Mem usage    Increment   Line Contents
================================================
   139   94.195 MiB   94.195 MiB   @profile
   140                             def getMaps(ncfile):
   141  335.914 MiB  241.719 MiB       mycmeMSdata = xr.open_dataset(ncfile).resample(time='3H').reduce(np.mean)
   142                             
   143  335.945 MiB    0.031 MiB       plt.figure(figsize=(20.48,10.24))
   144                             
   145                                 # projection,lat/lon extents and resolution of polygons to draw
   146                                 # resolutions: c - crude,l - low,i - intermediate,h - high,f - full
   147  336.809 MiB    0.863 MiB       map = Basemap(projection='merc',llcrnrlon=-10.,148  335.945 MiB    0.000 MiB                     llcrnrlat=30.,urcrnrlon=36.5,urcrnrlat=46.)
   149                             
   150                             
   151  339.773 MiB    2.965 MiB       X,Y = np.meshgrid(mycmeMSdata.longitude.values,152  336.809 MiB    0.000 MiB                          mycmeMSdata.latitude.values)
   153  348.023 MiB    8.250 MiB       x,y = map(X,Y)
   154                             
   155                                 # reduce arrows density (1 out of 15)
   156  348.023 MiB    0.000 MiB       yy = np.arange(0,y.shape[0],15)
   157  348.023 MiB    0.000 MiB       xx = np.arange(0,x.shape[1],15)
   158  348.023 MiB    0.000 MiB       points = np.meshgrid(yy,xx)
   159                             
   160                                 #cycle time to save maps
   161  348.023 MiB    0.000 MiB       i=0
   162  742.566 MiB    0.000 MiB       while i < mycmeMSdata.time.values.size:
   163  742.566 MiB  305.996 MiB           map.shadedrelief(scale=0.65)
   164                                     #waves height
   165  742.566 MiB    0.000 MiB           waveH = mycmeMSdata.VHM0.values[i,:,:]
   166  742.566 MiB    0.000 MiB           my_cmap = plt.get_cmap('rainbow')
   167  742.566 MiB    0.043 MiB           map.pcolormesh(x,y,waveH,cmap=my_cmap,norm=matplotlib.colors.Lognorm(vmin=0.07,vmax=4.,clip=True))
   168                                     # waves direction
   169  742.566 MiB    0.000 MiB           wDir = mycmeMSdata.VMDR.values[i,:]
   170  742.566 MiB    0.242 MiB           map.quiver(x[tuple(points)],y[tuple(points)],np.cos(np.deg2rad(270-wDir[tuple(points)])),np.sin(np.deg2rad(270-wDir[tuple(points)])),171  742.566 MiB    0.000 MiB               edgecolor='lightgray',minshaft=4,width=0.007,headwidth=3.,headlength=4.,linewidth=.5)
   172                                     # save plot
   173  742.566 MiB    0.000 MiB           filename = pd.to_datetime(mycmeMSdata.time[i].values).strftime("%Y-%m-%d_%H")
   174  742.566 MiB    0.086 MiB           plt.show()
   175  742.566 MiB   39.406 MiB           plt.savefig(TEMPDIR+filename+".jpg",quality=75)
   176  742.566 MiB    0.000 MiB           plt.clf()
   177  742.566 MiB    0.000 MiB           del wDir
   178  742.566 MiB    0.000 MiB           del waveH
   179  742.566 MiB    0.000 MiB           i += 1
   180                             
   181                                 #out of loop
   182  581.840 MiB    0.000 MiB       plt.close("all")
   183  581.840 MiB    0.000 MiB       mycmeMSdata.close()
   184  441.961 MiB    0.000 MiB       del mycmeMSdata

如您所见,分配的内存没有释放,并且在程序多次运行后,由于内存不足,它只是失败(“杀死”)。

如何释放数据集分配的内存?我正在使用dataset.close()并删除变量,但没有成功。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)