web-dev-qa-db-ja.com

10054エラーを解決する方法

あるウェブサイトが提供するアプリを使用して、ウェブサイトから定期的に、たとえば30秒ごとにデータを収集しています。返された応答は、データベースに記録されます。

インポートリクエストによってモジュール式のリクエストを使用し、コードを記述して例外をキャッチします。主な機能のコードは次のとおりです。

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( "''"、))
または( '接続が中止されました。'、error(10053、 ''))例外を省略し(データベースにNullを記録することにより)、次の期間の応答を取得し続けます。

ただし、10054エラーが発生すると、関数は機能しなくなります。

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

データベースをチェックして、10054エラーが発生した後、すべての応答がNullであることを確認します。第一に、ウェブサイトが故障する可能性があるため、応答がないのではないかと思います。しかし、手動で関数を再起動すると、再び応答が返ってきます。だから、それはウェブサイトの内訳では実現されていません。

Stackoverflowを検索すると、次のことがわかります。Errno10054既存の接続がリモートホストによって強制的に閉じられました。しかし、私はそれを解決する方法がわかりません。

この問題の解決策を教えてください(理想的には)、または手動で再起動せずに機能を再起動するための解決策を提供してください。 (機能を再起動すると、再び機能するように見えます。)

前もって感謝します。

7
Deep_fox

Webサーバーは積極的に接続を拒否しました。これは通常、混雑している、レート制限がある、またはサービス拒否攻撃を開始していると考えているためです。これをサーバーから取得した場合は、再試行する前に少しスリープする必要があります。実際、再試行する前にスリープしないと、サービス拒否攻撃になります。丁寧なことは、たとえば(1,2,4,8,16,32)秒のプログレッシブスリープを実装することです。

10
tdelaney