我目前正在使用此代码打印出使用ftp.retrbinary从ftp服务器下载的百分比,但下载完成时的完成率为0.27%,并且只表示sizeWritten已完成27828224位。我哪里错了?
from ftplib import FTP
ftp = FTP('host')
ftp.login('usr','pass')
totalSize = ftp.size('100file.zip')
print(totalSize, "bytes")
def download_file(block):
global sizeWritten
file.write(block)
sizeWritten += 1024
print(sizeWritten, "= size written", totalSize, "= total size")
percentComplete = sizeWritten / totalSize
print (percentComplete, "percent complete")
try:
file = open('100file.zip', "wb")
ftp.retrbinary("RETR " + '100file.zip' ,download_file)
print("Download Successful!")
except:
print("Error")
file.close()
ftp.close()
答案 0 :(得分:2)
你忽略了块的大小,假装每个块是1K:
sizeWritten += 1024
只需将其更改为:
sizeWritten += len(block)
您的客户端可以使用blocksize
参数向服务器发送最大块大小。但是你没有传递一个,所以默认为8192。
那么,为什么你不能得到12.5%,如果你的关系恰好是8倍?好吧,首先,最后一个块几乎总是小于最大值,所以你应该期望超过12.5%。第二,您只给服务器一个 max 块大小;它可以自由决定它不会发送比4K更多的东西,在这种情况下你会得到超过25%的代价。