2011-08-05 13 views
1

対接続httplibHTTPSConnectionを作成:パイソンhttplib.HTTPSConnectionタイムアウト - タイムアウトを設定するだけの簡単応答

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秒を超えてブロックされている場合は、ブロックを停止して例外を発生させます。私は、外部APIに到達できない場合は正しく処理していますが、接続を受け付けて応答するのには不安です。

答えて

2

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

あり:

Does python's httplib.HTTPConnection block?

それはあなたのケースで可能だ場合、私は、アプリケーション全体のためにgeventを使用し、それは完全に非ブロックI/Oをサポートし、一度に複数の接続に対しても、任意のタイムアウト方式を実装できます。

+0

私は実際にそれをブロックしたい。私は、接続の受け入れから応答の受信までの操作全体が最大10秒間ブロックされることを確認したいだけです。 –

関連する問題