【发布时间】:2014-09-29 18:22:45
【问题描述】:
我的 Google App Engine 程序顶部有这段代码:
from google.appengine.api import urlfetch
urlfetch.set_default_fetch_deadline(60)
我正在使用开瓶器来加载东西:
cj = CookieJar()
opener = urllib2.build_opener(urllib2.HTTPCookieProcessor( cj ) )
opener.addheaders = [ ( 'User-Agent', 'Mozilla/5.0 (Windows NT 6.1; WOW64)' ) ]
resp = opener.open( 'http://www.example.com/' )
5 秒后抛出异常:
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 404, in open
response = self._open(req, data)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 422, in _open
'_open', req)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 382, in _call_chain
result = func(*args)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 1222, in https_open
return self.do_open(httplib.HTTPSConnection, req)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/urllib2.py", line 1187, in do_open
r = h.getresponse(buffering=True)
File "/base/data/home/runtimes/python27/python27_dist/lib/python2.7/gae_override/httplib.py", line 524, in getresponse
raise HTTPException(str(e))
HTTPException: Deadline exceeded while waiting for HTTP response from URL: http://www.example.com
如何避免错误?
【问题讨论】:
-
如果您无法在 http 请求的年龄限制内完成此操作,另一种方法是将工作设置为 task 或 mapreduce job。这两种方式对方法和http请求有更灵活的时间限制。常规 gae http 请求有 15-20 秒的超时限制,因此如果您需要更多耗时的工作,还有其他选择。
标签: python google-app-engine urllib2 urlfetch