我正在尝试远程读取netcdf文件。我使用paramiko包读取文件,如下所示:
import paramiko
from netCDF4 import Dataset
client = paramiko.SSHClient()
client.set_missing_host_key_policy(paramiko.AutoAddPolicy())
client.connect(hostname=’hostname’, username=’usrname’, password=’mypassword’)
sftp_client = client.open_sftp()
ncfile = sftp_client.open('mynetCDFfile')
b_ncfile = ncfile.read() # ****
nc = Dataset('test.nc', memory=b_ncfile)
但是ncfile.read()
的运行速度非常慢。所以我的问题是:是否有其他替代方法可以远程读取netcdf文件,或者它有任何方法可以加快paramiko.sftp_file.SFTPFile.read()
的速度?
调用SFTPFile.prefetch
应提高读取速度:
SFTPFile.prefetch
另一个选项是使用ncfile = sftp_client.open('mynetCDFfile')
ncfile.prefetch()
b_ncfile = ncfile.read()
的bufsize
参数启用读取缓冲:
SFTPClient.open
([SFTPClient.open
是ncfile = sftp_client.open('mynetCDFfile', bufsize=32768)
b_ncfile = ncfile.read()
的值]
还有另一个选择是显式指定要读取的数据量(这使32768
采用更有效的代码路径:]
SFTPFile.MAX_REQUEST_SIZE
强制警告:请勿以这种方式使用BufferedFile.read
–这样做会丢失针对BufferedFile.read
的保护。有关正确的解决方案,请参见ncfile = sftp_client.open('mynetCDFfile')
b_ncfile = ncfile.read(ncfile.stat().st_size)
。