2014-12-06 227 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