Тайм-аут при использовании urllib2.urlopen с Django в GAE
Когда я запускаю этот код
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 через помощника Google App Engine для Django, я получаю ApplicationError: 2 timed out
исключение, но когда я запускаю один и тот же код в оболочке Python или Django, он работает просто отлично.
Есть идеи, что происходит? Спасибо!
2 ответа
Это связано с тем, что для App Engine по умолчанию установлено время ожидания 5 секунд. Если вы используете UrlFetch [1], вы можете использовать параметр deadline, чтобы установить время ожидания максимум до 10 секунд. Если страница, которую вы пытаетесь получить, занимает больше времени, вам не повезло.
[1] http://code.google.com/appengine/docs/python/urlfetch/fetchfunction.html
Вы можете избежать 10-секундного крайнего срока, используя службу асинхронной выборки Google, которая принимает крайние сроки до 60 секунд. https://developers.google.com/appengine/docs/python/urlfetch/asynchronousrequests