我正在使用Google Appengine中的Urlfetch,并添加截止日期参数以强制截止日期为短(3秒),如下所示:
try:
urlfetch.set_default_fetch_deadline(3)
return urlfetch.fetch(url='http://www.example.com', method=urlfetch.GET, deadline=3)
except google.appengine.runtime.apiproxy_errors.DeadlineExceededError:
pass
except google.appengine.api.urlfetch_errors.DeadlineExceededError:
pass
return None
但无论如何,我的线程会持续60秒(Appengine上的http请求的最大执行时间)然后在DeadlineException上失败("线程在请求之后运行。" )。
有没有办法确保在3秒内严格停止上层查询?
答案 0 :(得分:1)
我可以分享我目前在其中一个生产项目中运行的代码。在这个例子中我使用了0.5秒的截止时间。最后我查了一下,它还在工作:
t_rpc = urlfetch.create_rpc(deadline=0.5)
urlfetch.make_fetch_call(t_rpc, url)
# and then later...
try:
result = t_rpc.get_result()
except:
# handle errors...
pass
# use the result...
这实际上是使用API的异步版本,因此您可以在技术上在调用make_fetch_call
和get_result
之间执行操作。否则,您可以直接调用它们,它的功能与同步API相同。