истечение времени ожидания urlfetch python движка приложения

StackOverflow https://stackoverflow.com/questions/6388778

Вопрос

У меня работают два экземпляра приложений ядра приложений, с которыми я хочу взаимодействовать с помощью интерфейса Restful.Как только данные одного обновлены, он вызывает веб-перехватчик второго, который извлекает новую копию данных для своей собственной системы. Внутри site1 у меня есть:

Genracodicetagpre

Внутри обработчика data_updated на site2 у меня есть:

Genracodicetagpre

Между двумя сайтами передается очень мало данных, но я получаю следующую ошибку.Я пробовал увеличить крайний срок до 10 секунд, но это все равно не работает.

Genracodicetagpre

Может ли кто-нибудь рассказать о том, что может происходить?

Спасибо, Ричард

Это было полезно?

Решение 2

Изменение метода от

общий

в

общий

исправил ошибки дедлайна.

Из документации urlfetch :

<цитата>

крайний срок Максимальное время ожидания ответа от удаленный хост в секундах.Если удаленный хост не ответить за это время, возникает ошибка DownloadError.

Время, потраченное на ожидание запроса, не учитывается в квоте ЦП. по запросу.Это учитывается в таймере запроса.Если приложение таймер запроса истекает до возврата вызова URL Fetch, вызов отменен.

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

Другие советы

urlfetch App Engine не всегда ведет себя так, как ожидалось, у вас есть около 10 секунд, чтобы получить URL.Предполагая, что URL-адрес, который вы пытаетесь получить, запущен и работает, вы сможете перехватить код DeadlineExceededError, вызвав from google.appengine.runtime import apiproxy_errors, а затем заключив вызов urlfetch в блок try / except с помощью except apiproxy_errors.DeadlineExceededError:.

Соответствующий ответ здесь .

Пробовали ли вы вручную запрашивать URL-адреса (www.site2.com/data_updated и www.site1.com/get_new_data) с помощью curl или иным образом, чтобы убедиться, что они отвечают в отведенное время?Даже если объем данных, который необходимо передать, невелик, возможно, есть проблема с обработчиком, который вызывает задержку в возврате результатов.

Здесь проблема не в объеме передаваемых данных, а в задержке.

Если приложение, с которым вы разговариваете, часто требует> 10 секунд для ответа, вам придется использовать сервер «прокси-обратного вызова» на другой облачной платформе (EC2 и т. д.). Если вы можете на некоторое время отложить новыйПредполагается, что серверные экземпляры несколько ослабят временные ограничения urlfetch.

Если среднее время отклика составляет <10 секунд, и лишь относительно небольшое количество не удается, просто повторите попытку несколько раз.Надеюсь, ради вас вызовы идемпотентны (т.е. чтобы повторная попытка не имела побочных эффектов).В противном случае вы можете накрутить свой собственный слой поверх - это немного болезненно, но работает нормально, это то, что мы делаем.

Дж

В документе GAE теперь указано, что крайний срок может составлять 60 секунд:

общий
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top