Python FTP 挂起/421 超时的错误处理

Python error handling for FTP hang / 421 timeout

我有一个脚本(如下)将 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 秒)来决定它挂起的时间,然后让代码显示 "re-run this ftp command until it succeeds."

这可能吗?还有其他方法可以处理吗?

谢谢!

频道超时设置在ftp服务器上。某些界面(例如 FileZilla)允许您配置通道超时。幸运的是,Python 的 FTP 包就是其中之一。有关详细信息,请参阅 documentation。 同时,试试超时参数:

ftp = FTP('[FTP ADDRESS HERE]', timeout=30)

Maxim Lott (OP) 能够使用以下命令捕获超时错误,它会重新尝试连接直到成功:

import socket 
except socket.timeout, e:

这个错误让我思考了一会儿。

我在 True

的无限循环中抛出异常
  • 所以当它发生时它仍然是 True

  • 然后我调用我的函数 ftp_connect_to_site() 在一个名为 RemoteTar

  • 的 class 中

如果发生此异常,此功能将重新连接您不是最好的主意。

我是 python 的初学者

          except ftplib.error_temp  as e:
               print('Time run out reconnect: ',e)
               RemoteTar.ftp_connect_to_site()