0

Python Web アプリケーション サーバーから Tomcat Webserice に pdf バイナリ コンテンツを要求しています。

このような 2 回のリトライを Python で実装しました。ときどき HTTP 500 レスポンスを受け取ります。この問題は調査中ですが、最大数に達したプロセスなどのリソース不足に関連する環境の問題である可能性が非常に高いです。次の再試行では、多くの場合、部分的な BLOB コンテンツ (つまり、 PDF の EOF マーカー)。そんなことがあるものか?

この再試行ロジックに欠陥はありますか? HTTP 200 応答に不完全なデータがどのように含まれているかは、私の理解を超えています。最初に HTTP 200 が送信され、次に実際のデータが送信されますか (つまり、HTTP 200 を送信した後にサーバーが停止する可能性があることを意味します)? 他の唯一の説明は、サーバーがコンテンツ全体を送信しているが、データを生成しているプログラムが、HTTP 500 を引き起こした可能性のあるリソースの問題のために不完全なデータを送信しているということです。

# There is a unique id as well to make it new request. (retries is 2 by default)
while retries:
    try:
        req = urllib2.Request(url, data=input_html)
        req.add_header('Accept', 'application/pdf')
        req.add_header('Content-Type', 'text/html')
        handle = urllib2.urlopen(req)
        pdf_blob = handle.read()
    except:
        log(traceback)
        retries = retries - 1
        if not retries:
           raise

アーキテクチャは次のとおりです。

Web アプリケーション -> Tomcat を呼び出し -> PDF を取得 -> DB に保存。

4

0 に答える 0