Почему я вижу, что Deadline превысил HTTPException от отложенного? - PullRequest
1 голос
/ 05 апреля 2019

Почему при выполнении HTTP-запроса из defer (только) в App Engine появляется исключение HTTPException «Превышен крайний срок»?Я устанавливаю тайм-аут (540 секунд), когда я делаю запрос, используя urllib2 (см. Ниже), но мой запрос истекает около 180 секунд.Этот же запрос прекрасно работает локально, используя Cloud SDK и Djangae.

    req = urllib2.Request(
        settings.ENDPOINT,
        json_data,
        {
            'Content-Type': 'application/json',
            'X-API-KEY': settings.SOME_KEY,
        }
    )
    response = urllib2.urlopen(req, timeout=settings.SOME_TIMEOUT)

ОБНОВЛЕНИЕ:

Я также попытался установить глобальное время ожидания google.appengine.api.urlfetch на 540 через set_default_fetch_deadline, но безуспешно.

1 Ответ

1 голос
/ 05 апреля 2019

Я постоянно получаю эти предупреждения в своем коде:

/ базы / данные / дома / приложения / s ~ мой-проект-идентификатор / версия-идентификатор / Библиотека / urllib3 / вно / appengine.py: 256: AppEnginePlatformWarning: URLFetch не поддерживает гранулированный тайм-аут настройки, возвращаясь к общему значению или по умолчанию для тайм-аута URLFetch.

Возможно urllib2 попадает в ту же проблему, но просто не регистрирует предупреждение, как urllib3 делает

EDIT:

Я только что заметил, что вы сказали, что также пытались установить глобальное время ожидания urlfetch. Документы Java говорят, что

Максимальный крайний срок составляет 60 секунд для HTTP (S) запросов

По какой-то причине это отсутствует в документации по питону, но я думаю, что независимо от того, какое значение тайм-аута установлено, вы ограничены каким-то внутренним значением максимального тайм-аута.

https://cloud.google.com/appengine/docs/standard/java/outbound-requests#request_timeouts

...