Google App Engine: task_retry_limit не работает?
У меня есть приложение Python GAE.
Я хочу, чтобы мои задачи перестали работать или просто повторили один раз, если они не сработают. Прямо сейчас, они бегут навсегда, несмотря на то, что сообщает мне файл yaml!
Вот запись queue.yaml:
- name: globalPurchase
rate: 10/s
bucket_size: 100
retry_parameters:
task_retry_limit: 1
Если задача globalPurchase выходит из строя с кодом ошибки 500, она повторяется вечно до тех пор, пока оно не удастся с этим сообщением в журналах:
"Задача с именем" задача14 "в очереди" globalPurchase "не выполнена с кодом 500, повторит попытку через 30 секунд"
Почему task_retry_limit фактически не используется?
Ответы
Ответ 1
У меня была та же проблема. Документации и инструментов в этой области не хватает, но вот что я нашел:
- Параметры повтора не влияют на сервер разработки. Я пробовал много разных комбинаций, но он всегда был просто неопределенным шагом на 30 секунд. Параметры вступили в силу, когда я развернулся на рабочем сервере.
- Я не нашел способ отключить все повторы (за исключением того, что мой обработчик не бросает исключения).
- Если
task_retry_limit=0
, он все равно повторяет попытку.
- Если установлены
task_retry_limit=0
и task_age_limit
, то queue.yaml отклоняется с сообщением, что task_retry_limit
должно быть положительным.
- Аналогично, он жалуется, что
task_age_limit=0
.
- Если вы установите
task_retry_limit=1
и task_age_limit=1s
(по-видимому, минимальные значения), вы все равно получите один повтор.
- Минимальное время повторения составляет 20 секунд. Если задержка, указанная вашей конфигурацией, меньше 20, она будет просто ждать 20 секунд.
- Время до повторной попытки непредсказуемо; он кажется случайным образом отложен на минуту. После этого повторы следуют настроенному расписанию.
Ответ 2
У меня была такая же проблема, как ни странно, я начинаю нормально работать после того, как оставил ее, как есть в течение нескольких часов... Возможно, есть время, необходимое для обновления GAE??
Во всяком случае, для меня были настроены следующие параметры:
# configure the default queue
- name: default
rate: 1/s
retry_parameters:
# task will stop retrying ONLY when BOTH LIMITS ARE REACHED
task_retry_limit: 1
task_age_limit: 1s
Ответ 3
Вы должны установить task_retry_limit
равным нулю, если вы не хотите, чтобы он вообще повторился, и вам нужно использовать его в комбинации с task_age_limit
. Логика повторной очереди очереди приложений использует комбинацию task_try_limit
и task_age_limit
, чтобы определить, когда остановить повторную попытку.