2014-12-06 351 views
4

我使用一些网站提供的应用程序来收集来自网站的一些数据periodly,比方说,30多岁的时候。 然后将返回的响应记录在数据库中。如何解决10054错误

我通过导入请求使用请求模块化编写代码来捕获异常。 为主要功能的代码如下:

def get_response(self): 
    try: 
     response = requests.get(self.request_url) 
     if response.status_code == 200: 
      return response.json() 
     except Exception as e: 
      msg = "Exception is:\n %s \n" % e 
      print msg 

上述功能的工作原理相当不错的前几个小时。 该功能还可以从象一些例外恢复: ( '连接异常中止',BadStatusLine( “ ''”,))
或 ( '连接异常中止',错误(10053, '')) 它省略了例外(通过在数据库中记录Null)并继续得到下一个阶段的响应。

然而,功能停止encoutering 10054错误时工作。

Exception is: 
('Connection aborted.', error(10054, '')) 

我检查数据库,发现在10054错误发生之后所有响应都是空的。 我首先猜测网站可能会崩溃,因此没有收到任何回应。 但是,当我手动重新启动该功能时,它开始再次获得响应。 因此,这与网站的细分无关。

我在计算器搜索和查找:errno的10054现有的连接被强行关闭远程主机。 但我不知道如何解决它。

您能否提供一些解决此问题的方法?(理想情况下) 或提供一些解决方案以重新启动该功能而无需手动重新启动? (它看起来像有一次我重新启动funtion并再次将其工作原理。)

在此先感谢。

回答

4

Web服务器积极拒绝您的连接。这通常是因为它拥塞,有速度限制或认为你正在发起拒绝服务攻击。如果你从服务器得到这个信息,在再次尝试之前你应该睡一会儿。事实上,如果你在重试之前没有入睡,你就是拒绝服务攻击。有礼貌的事情是实施一个渐进式睡眠,例如(1,2,4,8,16,32)秒。

+0

感谢您的彻底解释。 – 2014-12-07 06:11:38

+0

然而,您的答案仍然是一个问题:即使在函数自动启动访问请求的时间与之后手动重新启动函数的时间之间的时间间隔很小时,手动重新启动程序的原因是什么?谢谢。 – 2014-12-07 06:35:30