在GAE中使用Django的urllib2.urlopen时超时

2 投票
2 回答
2083 浏览
提问于 2025-04-15 18:38

当我运行这段代码时

url = ('http://maps.google.com/maps/nav?'+
       'q=from%3A'+from_address+
       '+to%3A'+to_address+
       '&output=json&oe=utf8&key='+api_key)
request = urllib2.Request(url)
response = urllib2.urlopen(request)

在一个简单的Django视图中,我通过Google App Engine Helper for Django在谷歌应用引擎上运行,结果出现了一个ApplicationError: 2 timed out的错误。但是当我在Python或Django的命令行中运行同样的代码时,一切都正常。

有人知道这是怎么回事吗?谢谢!

2 个回答

1

你可以通过使用谷歌的异步获取服务来避免10秒的限制,这个服务允许你设置最长可以达到60秒的时间限制。https://developers.google.com/appengine/docs/python/urlfetch/asynchronousrequests

2

这是因为App Engine对这些请求有一个默认的超时时间,设定为5秒。如果你使用UrlFetch [1],可以通过deadline参数把超时时间设置到最多10秒。如果你想获取的页面超过这个时间,那就没办法了。

[1] http://code.google.com/appengine/docs/python/urlfetch/fetchfunction.html

撰写回答