我正在尝试远程读取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()
的速度?
发布于 2019-10-17 13:49:35
调用SFTPFile.prefetch
应该会提高读取速度:
ncfile = sftp_client.open('mynetCDFfile')
ncfile.prefetch()
b_ncfile = ncfile.read()
另一个选项是启用读取缓冲,使用bufsize
参数SFTPClient.open
ncfile = sftp_client.open('mynetCDFfile', bufsize=32768)
b_ncfile = ncfile.read()
(32768
是SFTPFile.MAX_REQUEST_SIZE
的一个值)
同样,对于写/上传:
在使用pysftp "open“方法打开的SFTP服务器上写入文件很慢。
另一种选择是显式指定要读取的数据量(它使BufferedFile.read
采用更有效的代码路径):
ncfile = sftp_client.open('mynetCDFfile')
b_ncfile = ncfile.read(ncfile.stat().st_size)
如果所有这些都不起作用,则可以将整个文件下载到内存中:
使用pdf管道工和Paramiko从SFTP服务器读取PDF文件。
强制性警告:不要以这种方式使用AutoAddPolicy
--这样做会使您失去对https://en.wikipedia.org/wiki/Man-in-the-middle_attack的保护。有关正确的解决方案,请参见https://stackoverflow.com/q/10670217/850848#43093883。
https://stackoverflow.com/questions/58433996
复制相似问题