2017-03-27 28 views
0

私は、2つのサーバーを持つWebサイトを持っています.1つはクライアント向けのWebサービス専用で、もう1つはより厳しいデータ処理サーバーです。Pythonリクエスト:再試行の回数を増やす

私は現在、Webサーバーの連絡先一般的に次のようになり、複数の要求のためのデータ・サーバプロセスがあります。過去のよりよい部分のために時計のように実行されている

payload = {'req_type':'data_processing', 'sub_type':'data_crunch', 'id_num':12345} 
r = requests.get('https://data.mywebsite.com/_api_route', params = payload) 

を...年。しかし、データサーバー上にパンダヘビー関数を作成した後、私は次のエラーが発生しています(パンダとは何の関係もないと思っていますが、とにかくそれを投げ捨てると思いました)。

HTTPSConnectionPool(host='data.mywebsite.com', port=443): 
    Max retries exceeded with url: /_api_route?...... 
    (Caused by <class 'httplib.BadStatusLine'>: '') 

両方のサーバでは、ubuntuとPythonを実行しており、Requestsライブラリはサーバ間の通信を処理しています。

Max retries exceeded with URLのような質問がありますが、OPは制御できないサーバーに連絡するよう求めています。私は両面をコードすることができます。私はデータサーバー上で何かを変更できることを願っています。それが何であるかは分かりません。

+1

データ処理サーバーのビューのreturn文で質問を更新してください。コードにエラーがあるか、明示的にそのビューから返されるレスポンスのステータスを設定しない限り、それは200になるはずです。推測しなければならない場合は、ビューにエラーがありますが、それはログにはっきりと現れるはずです。そこにエラーがなければ、私は['curl -v'](http://stackoverflow.com/a/7173011/5854907)を使ってディープ処理サーバーにデータを送信しようとします。です。 –

+0

@AllieFitter - アイデアをありがとう。我々はカール要求を模倣するために 'サブプロセス 'を実行しました。これはトラブルシューティングプロセスに役立ちました。しかし、実際の問題は、Webサーバーからデータサーバーへの同時要求の数のようです。 1回のリクエストで問題はありませんでしたが、複数の同時リクエストで問題が発生しました。私は以来、jQueryスクリプトに0.5秒の遅延を追加しました。すべてが正常に動作しているようです。 – pshep123

答えて

1

再試行しても番号を変更しても問題は解決しません。 Caused by <class 'httplib.BadStatusLine'>: ''はあなたが修正すべきものです。サーバーは、 "200"または "500"のようなものではなく、空のHTTPステータスコードを返しました。

+0

こんにちはステファン - 迅速な対応に感謝しますが、その行を修正する方法がわかりません。何かご意見は? – pshep123

+0

おそらくデータサーバーコードのバグです。提供された情報だけでは、それ以上のことは言えません。 –

+0

関連するスタック:http://stackoverflow.com/questions/27619258/httplib-badstatusline –

-1

私はこの問題の解決策として知られているインターネットを精査しました。近い将来、私はそれを見つけるつもりはないと思います。

counter = 0 
while counter < 10: 
    try: 
     r = requests.get('https://data.mywebsite.com/_api_route', params = payload) 
     counter = 10 
     code = r.json()['r']['code'] 
     res = r.json()['r']['response'] 
     return code, res 

    except requests.exceptions.ConnectionError, e: 
     counter += 1 
     time.sleep(1) 

それは同じくらい、それは回避策があると間違いなくソリューションではありません。

代わりに、私は次のようになります1秒の遅延に(Pythonで)内部の再試行ループに建てられましたしかし、今のところ、それはちょうど、それは動作します... 10回以上再試行する必要がないと仮定します。あなたはまだいないのであれば、もう一度、および同時実行を処理するためにuWSGIまたはgunicornなどのコンテナを使用NginxApacheがサーバーをホストするために使用する、まだいないのであれば

1

ソリューションは、だろう。私はuWSGIかなりの量を使用した、それは非常にまっすぐ進む構成です。リクエストを処理するプロセスをさらに作成するには、.iniファイルにprocesses = 2を設定するだけです。 NginxまたはApacheを使用してプロセスを起動することもできますが、uWSGIはPython用に特別に構築され、Flaskですばらしく動作します。私はこれをあなたがまだ実装していない実装し、あなたのサーバーが処理できる良い番号を見つけるまで、番号のプロセスをインクリメントするときにメモリとプロセッサの使用状況を観察することをお勧めします。

編集: P.私は、uWSGIを使ってNginxサーバー上にFlaskアプリケーションを実行し、かなりの骨なしのハードウェア(ちょうど2.5Ghzのデュアルコア)を使用し、16プロセスで約40%のCPU使用量を平均します。

+0

ありがとうAllie - 私はあなたが絶対に正しいと思う、これはサーバーレベルの修正が必要です。残念ながら、私はuWSGIなどを更新する方法については不明ですが、私はそれを調べます。そして、はい、私はすでにApacheとFlaskを使用しています。 – pshep123

関連する問題