减少 Paramiko 最大请求大小
Decrease Paramiko maximal request size
我有一个 Python Runbook,我想在 Paramiko 的 sftp_file.py
.[=15= 中设置 MAX_REQUEST_SIZE = 1024
而不是 32768
(默认值) ]
你知道我们该怎么做吗??
我正在尝试将文件从 SFTP 传输到本地。并且由于某些原因,超过 30MB 的文件传输在达到 27-28 MB 时会自动暂停,而不会收到任何错误消息。当我在本地将 max_request_size
更改为 1024
时,它起作用了。
尝试放慢传输速度。一个非常简单的传输节流实现可以是这样的:
import time
bytes_per_second = 512*1024
start_time = time.time()
def callback(transferred, total):
while (transferred / (time.time() - start_time)) > bytes_per_second:
time.sleep(0.1)
sftp.get(filepath, os.path.join(localFilePath, entry.filename), callback)
或者,只需通过重新执行下载来控制请求大小:
with sftp.open(filepath, "rb") as fr, \
open(os.path.join(localFilePath, entry.filename), "wb") as fl:
while True:
data = fr.read(1024)
fl.write(data)
if len(data) == 0:
break
以上是 SFTPClient.get
内部工作的精简版本。
我有一个 Python Runbook,我想在 Paramiko 的 sftp_file.py
.[=15= 中设置 MAX_REQUEST_SIZE = 1024
而不是 32768
(默认值) ]
你知道我们该怎么做吗??
我正在尝试将文件从 SFTP 传输到本地。并且由于某些原因,超过 30MB 的文件传输在达到 27-28 MB 时会自动暂停,而不会收到任何错误消息。当我在本地将 max_request_size
更改为 1024
时,它起作用了。
尝试放慢传输速度。一个非常简单的传输节流实现可以是这样的:
import time
bytes_per_second = 512*1024
start_time = time.time()
def callback(transferred, total):
while (transferred / (time.time() - start_time)) > bytes_per_second:
time.sleep(0.1)
sftp.get(filepath, os.path.join(localFilePath, entry.filename), callback)
或者,只需通过重新执行下载来控制请求大小:
with sftp.open(filepath, "rb") as fr, \
open(os.path.join(localFilePath, entry.filename), "wb") as fl:
while True:
data = fr.read(1024)
fl.write(data)
if len(data) == 0:
break
以上是 SFTPClient.get
内部工作的精简版本。