![](/img/trans.png)
[英]Unexpected behaviour when chunking with multiple netcdf files in xarray/dask
[英]Notebook kernel dies when saving multiple netCDF files with xarray
在 Jupyter notebook 中嘗試將多個 xarray 數據集保存到 netCDF 時,內核不斷死亡,同時輸出以下異常,暗示文件未正確關閉。
在這里,我試圖保存通過 OpenDAP 鏈接和 xarray 打開的 NASA-NEX 數據的子集。 然后我想將多個 NEX 模型連接在一起形成一個集成數據集。 以下函數執行此操作:
for var in variables:
for path in scenarios:
for model in models:
try:
time_range = slice(time_start, time_end)
data = xr.open_dataset(f'https://dataserver.nccs.nasa.gov/thredds/dodsC/bypass/NEX-GDDP/bcsd/{path}/'
f'r1i1p1/{var}/{model}.ncml').sel(lon=longitudes, lat=latitudes, time=time_range)
print(var, path, model, 'success')
data.to_netcdf(path=f'{var}_{path}_{model}.nc')
print(f'Saved {model}')
data.close()
except TypeError:
time_range = slice(cftime.DatetimeNoLeap(time_start.year,time_start.month,time_start.day),
cftime.DatetimeNoLeap(time_end.year,time_end.month,time_end.day))
data = xr.open_dataset(f'https://dataserver.nccs.nasa.gov/thredds/dodsC/bypass/NEX-GDDP/bcsd/{path}/'
f'r1i1p1/{var}/{model}.ncml').sel(lon=longitudes, lat=latitudes, time=time_range)
new_timeindex = data.indexes['time'].to_datetimeindex()
data['time'] = new_timeindex
del new_timeindex
print(var, path, model, 'success w/ no leap')
#if save_netcdf:
# Now save data to netCDF
#data.to_netcdf(path=f'{var}_{path}_{model}.nc')
#print(f'Saved {model}')
#data.close()
print('Concatenating models into ensemble')
data_final = xr.open_mfdataset(f'{var}_{path}_*.nc', combine='nested', concat_dim='model')
data_final.to_netcdf(path=f'{var}_{path}_ensemble.nc')
return data_final
運行時,每個文件都會拋出以下不停止代碼運行的異常:
Exception ignored in: <function CachingFileManager.__del__ at 0x31f530b00>
Traceback (most recent call last):
File "/Users/Zach_Bruick/opt/miniconda3/envs/climate2/lib/python3.7/site-packages/xarray/backends/file_manager.py", line 243, in __del__
self.close(needs_lock=False)
File "/Users/Zach_Bruick/opt/miniconda3/envs/climate2/lib/python3.7/site-packages/xarray/backends/file_manager.py", line 221, in close
file.close()
File "netCDF4/_netCDF4.pyx", line 2276, in netCDF4._netCDF4.Dataset.close
File "netCDF4/_netCDF4.pyx", line 2260, in netCDF4._netCDF4.Dataset._close
File "netCDF4/_netCDF4.pyx", line 1754, in netCDF4._netCDF4._ensure_nc_success
RuntimeError: NetCDF: cannot delete file
我可以看到我的記憶隨着保存的每個文件而增長。 這是一個錯誤還是我在泄漏內存?
我想我遇到了完全相同的問題。 我敢打賭您安裝的 libnetcdf 版本是 >=4.7.1。 嘗試將版本固定到 4.6.2。
我不完全確定,但似乎有一個非常微妙的回歸。
當我只有一個文件時,或者當我沒有將結果保存到 netcdf 到磁盤時,它不會發生,並且只發生在 OpenDAP 鏈接上。
編輯:我在 GitHub https://github.com/Unidata/netcdf4-python/issues/982上發現了相關問題
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.