2011-08-05 46 views
1

當創建與httplib一個HTTPSConnection,很容易設置超時:的Python 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秒,並且如果阻塞時間超過10秒,請停止阻塞並引發異常。我正確處理外部API無法訪問的情況,但不確定它何時接受我的連接但無法響應。

回答

2

看起來標準庫的實現不支持套接字讀操作的超時。您必須使HTTPSConnection(技術上說是HTTPResponse._safe_read方法)對此無阻塞。

有一個類似的問題在這裏,這也可能有助於:

Does python's httplib.HTTPConnection block?

我會用gevent整個應用程序,如果你的情況是可能的,支持完全非阻塞I/O和您可以實現所需的任何超時方案,即使對於多個連接一次。

+0

我真的希望它阻止。我只是想確保從接受連接到接收響應的整個操作阻塞最多10秒。 –