Reading file opened with Python Paramiko method is slow

Posted on

Question :

Reading file opened with Python Paramiko method is slow

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

import paramiko
from netCDF4 import Dataset

client = paramiko.SSHClient()
client.connect(hostname=’hostname’, username=’usrname’, password=’mypassword’)

sftp_client = client.open_sftp()
ncfile ='mynetCDFfile')
b_ncfile =    # ****

nc = Dataset('', memory=b_ncfile)

But the run speed of is VERY SLOW.
So my question is: is there any alternative way to read a netcdf file remotely, or does it has any approach to speed up

Answer #1:

Calling SFTPFile.prefetch should increase the read speed:

ncfile ='mynetCDFfile')
b_ncfile =

Another option is enabling read buffering, using bufsize parameter of

ncfile ='mynetCDFfile', bufsize=32768)
b_ncfile =

(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 take a more efficient code path):

ncfile ='mynetCDFfile')
b_ncfile =

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”.

Answered By: Martin Prikryl

Leave a Reply

Your email address will not be published. Required fields are marked *