如何加速SFTP传输?

2024-05-21 18:28:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我希望将大约40-50个文件从一个位置推送到另一个位置,总共约200 gb,而无需将它们下载到中间位置。有了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)))

Tags: 文件inimportparamikosizetimecountusername