urlfetchの制限時間は5秒

Google App Engine では、外部のWebサービスのAPIを呼び出したり、RSSを取得したりするために、urlfetch というモジュールが提供されています。この urlfetch モジュールの fetch 関数を使って、URLのドキュメントを取得できます。

ただ、fetch 関数のデフォルトの制限時間が5秒なので、URL先の反応が遅いと、DownloadError が発生してしまいます。タイムアウトです。私の場合、RSSを取得しようとして、何度もタイムアウトになりました。

回避方法として、fetch 関数にはタイムアウト時間を指定する deadline オプションが用意されています。上限は10秒までですが、このオプションを使うことで、タイムアウトの回数がだいぶ減りました。

from google.appengine.api import urlfetch

# deadline でタイムアウトまでの時間を上限いっぱい(10秒)にする
result = urlfetch.fetch(url, deadline=10)

今のところ、日本語のドキュメントには deadline の記述がありません。詳細は英語版で確認して下さい。