Reading file opened with Python Paramiko SFTPClient.open method is slow

前端 未结 1 729
你的背包
你的背包 2020-12-04 00:12

I am trying to remote read a netcdf file.
I used paramiko package to read my file, like this:

import paramiko
from netCDF4 import Data         


        
相关标签:
1条回答
  • 2020-12-04 00:26

    Calling SFTPFile.prefetch should increase the read speed:

    ncfile = sftp_client.open('mynetCDFfile')
    ncfile.prefetch()
    b_ncfile = ncfile.read()
    

    Another option is enabling read buffering, using bufsize parameter of SFTPClient.open:

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

    (32768 is a value of SFTPFile.MAX_REQUEST_SIZE)

    Similarly for writes/uploads:
    Writing to a file on SFTP server opened using pysftp "open" method is slow.


    Yet another option is to explicitly specify the amount of data to read (it makes BufferedFile.read take a more efficient code path):

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

    If none of that works, you can download the whole file to memory instead:
    Use pdfplumber and Paramiko to read a PDF file from an SFTP server


    Obligatory warning: Do not use AutoAddPolicy this way – You are losing a protection against MITM attacks by doing so. For a correct solution, see Paramiko "Unknown Server".

    0 讨论(0)
提交回复
热议问题