当前位置: 首页 > 面试题库 >

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

梁丘凯定
2023-03-14
问题内容

我正在尝试远程读取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应提高读取速度:

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)

_强制性警告:请勿以AutoAddPolicy这种方式使用–这样做会丢失针对MITM攻击的保护。



 类似资料:
  • 本文向大家介绍C#使用文件流读取文件的方法,包括了C#使用文件流读取文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用文件流读取文件的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍C#使用Streamwriter打开文件的方法,包括了C#使用Streamwriter打开文件的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#使用Streamwriter打开文件的方法。分享给大家供大家参考。具体如下: 希望本文所述对大家的C#程序设计有所帮助。

  • 本文向大家介绍php 使用file_get_contents读取大文件的方法,包括了php 使用file_get_contents读取大文件的方法的使用技巧和注意事项,需要的朋友参考一下 当我们遇到文本文件体积很大时,比如超过几十M甚至几百M几G的大文件,用记事本或者其它编辑器打开往往不能成功,因为他们都需要把文件内容全部放到内存里面,这时就会发生内存溢出而打开错误,遇到这种情况我们可以使用PHP

  • 我试图简单地读取文本文件的内容并将其存储到数组中,但是: 它给了我一个“打开”的错误: 此检查检测应该解析但不解析的名称。由于动态调度和鸭子类型,这在有限但有用的情况下是可能的。与实例项相比,顶层和类级项得到更好的支持。 谁能解释我做错了什么?谢谢

  • 本文向大家介绍c#打开py文件的方法,包括了c#打开py文件的方法的使用技巧和注意事项,需要的朋友参考一下 每个编程语言都有它的优势,那么我们如何在一个语言中使用其他编程语言的代码,并完成工作呢?今天我就用C#打开py文件,不调用py的方法。程序执行的效果如下图 1、在百度上搜索“ironpython官网”,选择ironpython。 2、进入官网后选择Download下载,下载资源。 3、选择要

  • 问题内容: 我有一个脚本读取文件,然后根据该文件完成测试,但是我遇到了一个问题,因为一个小时后文件会重新加载,并且无法在该时间点或之后重新读取该脚本。 所以: 获取要读取的新文件 读取文件 执行文件测试 获取要读取的新文件(具有相同的名称-但如果它是解决方案的一部分,则可以更改) 读取新文件 对新文件执行相同的测试 谁能建议一种使Python重新读取文件的方法? 问题答案: 要么到文件开头 或再次