使用Python Paramiko SFTPClient.open方法打开的读取文件速度很慢

问题描述 投票:3回答:1

我正在尝试远程读取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()的速度?

python ssh sftp paramiko netcdf
1个回答
2
投票

调用SFTPFile.prefetch应提高读取速度:

SFTPFile.prefetch

另一个选项是使用ncfile = sftp_client.open('mynetCDFfile') ncfile.prefetch() b_ncfile = ncfile.read() bufsize参数启用读取缓冲:

SFTPClient.open

([SFTPClient.openncfile = 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)

© www.soinside.com 2019 - 2024. All rights reserved.