我有一个脚本(下面)将html文件推送到服务器。 95%的时间都有效。但是,大约5%的时间,服务器发生故障并且尝试连接挂起。它停转15分钟(900秒)然后失败。
ftp = FTP('[FTP ADDRESS HERE]')
ftp.login('[USERNAME]','[PASSWORD]')
converted_HTML_string = io.BytesIO(HTML_string)
ftp.storbinary('STOR public_html/home.html', converted_HTML_string)
同样,这在95%的时间都有效。在它没有的5%中,如果我在挂起时手动中断它并且只是再次重新运行请求 - 那么它可以正常工作。这似乎是由临时服务器故障引起的。我无法控制服务器质量。
真正的问题是挂起太长了。我希望能够设置一个时间限制(如30秒)挂起的时间长度,然后让代码显示"重新运行此ftp命令直到成功为止。"
这可能吗?还有其他方法可以解决这个问题吗?
谢谢!
答案 0 :(得分:3)
在ftp服务器上设置通道超时。某些接口(例如FileZilla)允许您配置通道超时。幸运的是,Python的FTP包就是其中之一。有关详细信息,请参阅documentation。 在此期间,只需尝试超时参数:
ftp = FTP('[FTP ADDRESS HERE]', timeout=30)
Maxim Lott(OP)能够通过以下方式捕获超时错误,重试连接直到它起作用:
import socket
except socket.timeout, e: