1

HTTPSConnectionwithを作成するときhttplib、タイムアウトを設定するのは簡単です:

connection = httplib.HTTPSConnection('some.server.com', timeout=10)
connection.request('POST', '/api', xml, headers={'Content-Type': 'text/xml'})
response = connection.getresponse().read()

この操作には、接続の受け入れや応答の受信など、さまざまな部分があります。

タイムアウトは操作全体に適用されますか? リモートホストが接続を受け入れても応答を返さない場合でもタイムアウトしますか? タイムアウトを設定することで、操作が最大 10 秒間ブロックされるようにしたいと考えています。

いくつかのコンテキスト:

外部 API に接続していて、操作をブロックしたい。10 秒以上ブロックしないでください。10 秒以上ブロックしている場合は、ブロックを停止して例外を発生させます。外部 API に到達できない場合は正しく処理していますが、接続を受け入れても応答しない場合は不明です。

4

1 に答える 1

2

標準ライブラリの実装は、ソケット読み取り操作のタイムアウトをサポートしていないようです。これを行うには、HTTPSConnection(技術的にはHTTPResponse._safe_readメソッド)を非ブロックにする必要があります。

ここにも同様の質問があり、これも役立つ場合があります。

Python の httplib.HTTPConnection はブロックされますか?

あなたのケースで可能であれば、アプリケーション全体にgeventを使用します。これは、完全に非ブロックの I/O をサポートし、一度に複数の接続を行う場合でも、必要なタイムアウト スキームを実装できます。

于 2011-08-05T09:38:40.107 に答える