如何在指定时间后中止并重试ftp下载?

时间:2013-06-21 08:25:16

标签: python ftp timeout ftplib

我有一个Python脚本,它连接到远程FTP服务器并下载文件。由于我连接的服务器非常可靠,因此传输失速和传输速率变得非常低。但是,不会引发任何错误,因此我的脚本也会停止。

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

2 个答案:

答案 0 :(得分:1)

我使用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()

答案 1 :(得分:0)