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()
我有一个脚本(如下)将 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()