gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 16:55:48 26 4
gpt4 key购买 nike

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

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

ncfile = sftp_client.open('mynetCDFfile', bufsize=32768)
b_ncfile = ncfile.read()

(32768SFTPFile.MAX_REQUEST_SIZE 的值)

写入/上传类似:
Writing to a file on SFTP server opened using Paramiko/pysftp "open" method is slow .


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

ncfile = sftp_client.open('mynetCDFfile')
b_ncfile = ncfile.read(ncfile.stat().st_size)

如果这些都不起作用,您可以将整个文件下载到内存中:
Use pdfplumber and Paramiko to read a PDF file from an SFTP server


强制性警告:不要以这种方式使用 AutoAddPolicy – 您正在失去针对 MITM attacks 的保护通过这样做。有关正确的解决方案,请参阅 Paramiko "Unknown Server" .

关于python - 读取使用 Python Paramiko SFTPClient.open 方法打开的文件速度很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58433996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com