Как установить тайм-аут для urlfetch в Google App Engine? - PullRequest
17 голосов
/ 29 января 2010

Я пытаюсь, чтобы Django (поверх GAE) получал данные из другого веб-сервиса. Я часто сталкиваюсь с такой ошибкой:

ApplicationError: 2 истекло время ожидания запроса

Метод: GET

URL запроса: http://localhost:8080/

Тип исключения: ошибка загрузки

Значение исключения: ошибка приложения: истекло 2 тайм-аута

Местоположение исключения: /google_appengine/google/appengine/api/urlfetch.py ​​в _get_fetch_result, строка 325

Такое ощущение, что время ожидания истекает только через 12 секунд (я не уверен, но оно действительно короткое).

Вопрос: как установить более длительное время ожидания?

Ответы [ 4 ]

27 голосов
/ 19 октября 2012

Поскольку это вопрос Python, я подумал, что смогу дать ответ на Python для всех, кто сталкивается с этой проблемой.

Просто импортируйте urlfetch и затем определите крайний срок, прежде чем делать что-либо еще в вашем коде:

from google.appengine.api import urlfetch

urlfetch.set_default_fetch_deadline(60)
24 голосов
/ 29 января 2010

Вы можете установить его, используя аргумент deadline функции fetch . От документы :

Срок может составлять максимум 60 секунд для обработчиков запросов и 10 минут для очереди задач и обработчиков заданий cron. Если крайний срок - Нет, крайний срок - 5 секунд.


Редактировать: похоже, это изменилось. С здесь :

Вы можете установить крайний срок для запроса, наибольшее количество времени, которое служба будет ожидать ответа. По умолчанию срок извлечения составляет 5 секунд. Вы можете настроить крайний срок по умолчанию для запросов, используя функцию urlfetch.set_default_fetch_deadline().

И на этой странице перечислены значения времени ожидания по умолчанию:

В настоящее время существует несколько ошибок с именем DeadlineExceededError для среды выполнения Python:

  • google.appengine.runtime.DeadlineExceededError: повышается, если общее время ожидания запроса истекло, как правило, через 60 секунд или 10 минут для запросов очереди задач.
  • google.appengine.runtime.apiproxy_errors.DeadlineExceededError: повышается, если RPC превысил свой срок. Обычно это 5 секунд, но его можно установить для некоторых API, использующих опцию 'deadline'.
  • google.appengine.api.urlfetch_errors.DeadlineExceededError: повышается, если истекло время ожидания URLFetch.
7 голосов
/ 23 июня 2013

Для Go, вы можете попробовать код ниже.

// createClient is urlfetch.Client with Deadline
func createClient(context appengine.Context, t time.Duration) *http.Client {
    return &http.Client{
        Transport: &urlfetch.Transport{
            Context:  context,
            Deadline: t,
        },
    }
}

Вот как это использовать.

// urlfetch
client := createClient(c, time.Second*60)
0 голосов
/ 29 января 2010

Это кажется коротким, но вы должны знать, что время ожидания запроса на GAE составляет около 30 секунд. Поскольку вам, вероятно, нужно выполнить некоторые операции с ответом вашего urlfetch, я думаю, что нет необходимости превышать время ожидания более 10 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...