1

Python を使用して REST API にアクセスしていますが、実行に時間がかかる場合があります (5 分以上)。私はpyelasticsearchを使用してリクエストを行い、次のようにタイムアウトを10分に設定しようとしました:

es = ElasticSearch(config["es_server_url"], timeout=600)
results = es.send_request("POST", 
                      [config["es_index"], "_search_with_clusters" ],
                      cluster_query)

ただし、5分(10分ではない)後にタイムアウトしますrequests.exceptions.ConnectionError (Caused by <class 'socket.error'>: [Errno 104] Connection reset by peer)

ソケットタイムアウトを設定し、次のようにリクエストを直接使用してみました:

socket.setdefaulttimeout(600)
try:
    r = requests.post(url, data=post, timeout=600)
except:
    print "timed out"

毎回約 5 分後にタイムアウトします。

リクエストが返されるまで、スクリプトをより長く待機させるにはどうすればよいですか?

4

1 に答える 1

1

「ピアによる接続のリセット」というエラーECONNRESETは、サーバー、またはユーザーとサーバーの間のルーターまたはプロキシが強制的に接続を閉じたことを意味します。

したがって、エンドでより長いタイムアウトを指定しても、違いはありません。誰が接続を閉じているかを把握し、より長く待機するように構成する必要があります。

もっともらしい場所は、サーバー アプリケーション自体、そのアプリケーションを駆動するサーバー プログラム (たとえば、mod_wsgi で Apache を使用している場合、Apache)、負荷分散ルーター、フロントエンド サーバー、またはそのサーバーの前にあるリバース プロキシです。またはクライアントの前にある Web プロキシ。

問題がどこにあるのかを突き止めた後、それが自分で修正できない場合は、サーバーからクライアントに少しずつ、役に立たないが無害なもの (HTTP 100、追加のヘッダー、クライアントがスキップする方法を知っている本文テキストなど)120秒ごと。ハングアップしているコンポーネントによっては、これが機能する場合と機能しない場合があります。

于 2013-10-25T21:56:29.720 に答える