微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

FTP:如何处理挂起和恢复下载?

如何解决FTP:如何处理挂起和恢复下载?

我每6个小时左右通过ftp服务器定期下载一个〜300 Mb文件。大多数下载都运行良好,但有时该过程挂起,我需要手动终止并重新启动。因此,我想要一个更强大的下载系统,最好具有以下条件。

  1. 尽可能避免超时或挂起。并且可以在发生这种情况时对其进行处理
  2. 如果下载被终止,请尝试将其恢复几次直到完成(如果在任何尝试的时间内都无法使用,则发送错误消息)

对于(1),我读过this question,在所有块都下载完之前,最好将python线程与keep_alive调用一起使用。

def downloadFile(…):
    ftp = FTP(…)
    sock = ftp.transfercmd('RETR ' + filename)
    def background():
        f = open(…)
        while True:
            block = sock.recv(1024*1024)
            if not block:
                break
            f.write(block)
        sock.close()
    t = threading.Thread(target=background)
    t.start()
    while t.is_alive():
        t.join(60)
        ftp.voidcmd('NOOP')

对于(2),可能存在一个循环,用于检查文件是否已完全下载。如果没有,它可能会从原来的状态重新开始。基于this question

for i in range(3):
    if "Check if file has been completely downloaded":
        if os.path.exists(filename):
            restarg = {'rest': str(os.path.getsize(filename))}
        else:
            restarg = {}
        ftp.transfercmd("RETR " + filename,**restarg)

但是如何合并(1)和(2)? 您可以继续执行线程下载吗?有很多我们甚至不知道下载顺序的块。

如果无法将这两种方法结合使用,您还有其他想法吗?

此外,我不太确定如何确定ftp下载是否完成。我应该为此检查文件大小吗?文件大小可能会从一次下载更改为另一次下载。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。