AppEngine的urlfetch,如何强制超时得到尊重

时间:2017-03-28 15:02:44

标签: google-app-engine urlfetch

我正在使用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秒内严格停止上层查询?

1 个答案:

答案 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_callget_result之间执行操作。否则,您可以直接调用它们,它的功能与同步API相同。