Тайм-аут при использовании 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

Другие вопросы по тегам