tuneoの日記: タイムアウト検出とその対策。
日記 by
tuneo
urllib2使用時にタイムアウトが発生する(かもしれない。デフォルトではタイムアウト無効)のは、以下の2つの時点。
- u = urllib2.urlopen(url)でHTTPレスポンスヘッダを読むとき
- u.read()でコンテンツ本体を読むとき
デフォルトの状態ではurllib2モジュールではタイムアウトなんて無視してゴミデータを寄越してくれちゃったりするのだが、いくらなんでもそりゃマズイだろ、ってことで思案した結果、
- urllib2はhttplibを使用して実装され、httplibはsockeetを使用して実装されている
- したがって、httplibなりsocketなりにタイムアウトをうまく扱う仕組みがあれば、それを使ってurllib2使用時のタイムアウトを検出できる
- リファレンスを探すと…なんだ、socketにはsetdefaulttimeout()なんてメソッドがあって、タイムアウト時にはsocket.timeout例外が発生するじゃないか。
というわけでタイムアウトの検出とその対策はなんとかなりそうだ。問題は、socket.setdefaulttimeout()を使用したタイムアウト時間指定は、socketを使ってる全てのコードに影響があるってことだ。うまいこと始末できないもんかなぁ。
しかし/.Jの人間はPythonの読みのことしかネタが無いのか(怒)。
モデ権があったので速攻で-1しておきましたが、折角のPythonの記事なのにコメント書けないのが悲しい。
タイムアウト検出とその対策。 More ログイン