我有一个Python脚本,它连接到远程FTP服务器并下载文件。由于我连接的服务器不非常可靠,因此传输失速和传输速率变得非常低。但是,不会引发任何错误,因此我的脚本也会停止。
我使用ftplib
模块和retrbinary
函数。我希望能够设置一个超时值,然后下载中止,然后自动重试/重新启动传输(恢复将很好,但这不是绝对必要的,因为文件只有~300M)。
答案 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)