我希望从一个位置到另一个位置推送总计约200 gb的40-50个文件,而不将它们下载到中间位置。使用filezilla,我可以在~17-28mbis下载单个文件。使用paramiko,阅读速度只是其中的一小部分。 (相比之下,上传速度非常快。)
我尝试了一系列不同的方法,改变窗口大小,改变最大数据包,这些都有所帮助,但最终还是不能超过300kbs。有没有其他方法可以解决这个问题?
import paramiko
import math
import io
import time
transport = paramiko.Transport(host, port)
transport.connect(username = username, password = password)
sftp = paramiko.SFTPClient.from_transport(transport, window_size = 134217727, max_packet_size=pow(2,50))
chunk_size = 1024*250
for file in sftp.listdir():
if 'SD_Demographic' in file:
sftp_file = sftp.file(file, 'r')
source_size = sftp_file._get_size()
chunk_count = int(math.ceil(source_size / float(chunk_size)))
for i in range(chunk_count):
start = time.time()
chunk = sftp_file.read(chunk_size)
end = time.time()
seconds = end - start
print('%s read chunk from ftp (%i/%i) %ikbs' % (
sftp_file, i + 1, chunk_count,
math.ceil((chunk_size / 1024) / seconds)))