如何在指定时间后重试FTP下载



我有一个Python脚本连接到远程FTP服务器并下载文件。由于我连接的服务器不是非常可靠,因此经常发生传输停滞和传输速率变得非常低的情况。然而,没有错误被抛出,所以我的脚本也停止了。

我使用ftplib模块,具有retrbinary功能。我希望能够设置一个超时值后,下载中止,然后自动重试/重新启动传输(恢复会很好,但这不是严格必要的,因为文件只有~300M)。

我使用threading模块管理了我需要做的事情:

 conn = FTP(hostname, timeout=60.)
 conn.set_pasv(True)
 conn.login()
 while True:
     localfile = open(local_filename, "wb")
     try:
         dlthread = threading.Thread(target=conn.retrbinary,
                 args=("RETR {0}".format(remote_filename), localfile.write))
         dlthread.start()
         dlthread.join(timeout=60.)
         if not dlthread.is_alive():
             break
         del dlthread
         print("download didn't complete within {timeout}s. "
                 "waiting for 10s ...".format(timeout=60))
         time.sleep(10)
         print("restarting thread")
     except KeyboardInterrupt:
         raise
     except:
         pass
     localfile.close()

FTP类的timeout参数http://docs.python.org/2/library/ftplib.html#ftplib.FTP

相关内容

  • 没有找到相关文章