首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Paramiko SFTPClient.open方法打开的文件读取速度慢

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

Stack Overflow用户
提问于 2019-10-17 13:35:15
回答 1查看 11.2K关注 0票数 7

我正在尝试远程读取netcdf文件。

我用Paramiko软件包来读我的文件,就像这样:

代码语言:javascript
运行
复制
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()的速度?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-10-17 13:49:35

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

代码语言:javascript
运行
复制
ncfile = sftp_client.open('mynetCDFfile')
ncfile.prefetch()
b_ncfile = ncfile.read()

另一个选项是启用读取缓冲,使用bufsize参数SFTPClient.open

代码语言:javascript
运行
复制
ncfile = sftp_client.open('mynetCDFfile', bufsize=32768)
b_ncfile = ncfile.read()

(32768SFTPFile.MAX_REQUEST_SIZE的一个值)

同样,对于写/上传:

在使用pysftp "open“方法打开的SFTP服务器上写入文件很慢

另一种选择是显式指定要读取的数据量(它使BufferedFile.read采用更有效的代码路径):

代码语言:javascript
运行
复制
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

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58433996

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档