【问题标题】:Python error handling for FTP hang / 421 timeoutFTP 挂起/421 超时的 Python 错误处理
【发布时间】:2016-01-21 01:54:20
【问题描述】:

我有一个将 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 命令直到它成功。”

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

谢谢!

【问题讨论】:

    标签: python error-handling ftp timeout ftplib


    【解决方案1】:

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

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

    Maxim Lott (OP) 能够通过以下方式捕获超时错误,这会重新尝试连接直到它正常工作:

    import socket 
    except socket.timeout, e:
    

    【讨论】:

    • 谢谢。如果它对其他人有帮助,我可以通过以下方法捕获超时错误,这使我能够重新尝试连接,直到它正常工作:
    • 导入socket [这里的段落] 除了socket.timeout, e:
    • 我将您的解释添加到此答案中,以提高其知名度。
    【解决方案2】:

    这个错误让我想了一会儿。

    我在一个无限循环中发生了异常,而 True

    • 所以当它发生时它仍然是真实的

    • 然后我调用位于名为 RemoteTar 的类中的函数 ftp_connect_to_site()

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

    是我能想到的python初学者

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

    【讨论】:

      猜你喜欢
      • 2013-03-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多