Python 如何有效地从连接丢失中恢复?
我使用“请求”模块以相对较高的频率从某个给定站点获取信息。 事实上,我想每10秒访问一次远程站点 我的代码如下:Python 如何有效地从连接丢失中恢复?,python,request,recover,Python,Request,Recover,我使用“请求”模块以相对较高的频率从某个给定站点获取信息。 事实上,我想每10秒访问一次远程站点 我的代码如下: def get_response_without_ddos_suspect(request_url, timeout=10): while True: try: response = requests.get(request_url, timeout=timeout) print response
def get_response_without_ddos_suspect(request_url, timeout=10):
while True:
try:
response = requests.get(request_url, timeout=timeout)
print response
except Exception as e:
print e
time.sleep(10)
“request_url”是网站提供的一些访问api,因此没有问题。
我希望它能起作用,但事实上,该功能有时不能起作用。
我试图通过打印这些异常来捕获异常,以发现这只是一个简单的超时异常。
但我的函数再也得不到响应了。
我觉得函数正在等待一些永远不会出现的响应
但是,当我手动重新启动函数时,它会再次得到响应。
所以,我真的很困惑,不知道发生了什么。
这个问题困扰了我好几天,但在谷歌搜索并在Stackoverflow中寻找解决方案几天后,我自己没能解决它。
如何继续访问站点,同时避免在发生异常后不再获取数据。
由于它可以通过手动重新启动程序来恢复,因此应该存在某种方法使功能从故障中自动恢复。
请帮忙
我是python和spider的新手,因此请提供尽可能详细和彻底的解决方案。您访问的站点是否有任何限制速率请求的策略?你这里的代码看起来很好,所以我想这可能是你无法控制的。真奇怪,没有限制速率请求的策略。最奇怪的是,我可以手动重新启动该功能,它工作正常,但无法从故障中自动恢复。我查看了请求代码,它正在为每个请求创建一个新会话,这意味着:每次调用url时,您都在创建一个全新的HTTP连接。因此,不是您的http连接正在消亡。你能检查那些无法检查失败原因/内容的http请求吗?@Greg我认为这不是http请求的问题,而是python线程的问题。现在我放弃线程,转而使用APScheduler,通过add_interval_作业同时启动4个spider。它工作得很好。。在罚单中了解这一点可能会有用。