Клиент Cloud Tasks игнорирует конфигурацию повтора

В основном то, о чем говорится в названии. В документации API и клиента указано, что повторную попытку можно передать create_task:

        retry (Optional[google.api_core.retry.Retry]):  A retry object used
            to retry requests. If ``None`` is specified, requests will
            be retried using a default configuration.

Но это просто не работает. Передача экземпляра Retry ничего не делает, и настройки уровня очереди по-прежнему используются. Например:

from google.api_core.retry import Retry
from google.cloud.tasks_v2 import CloudTasksClient

client = CloudTasksClient()
retry = Retry(predicate=lambda _: False)
client.create_task('/foo', retry=retry)

Это должно создать задачу без повторной попытки. Я пробовал всевозможные конфигурации, и каждый раз он просто использует те настройки, которые установлены в очереди.


person Liam Meck    schedule 18.09.2019    source источник


Ответы (3)


Вы можете передать настраиваемый предикат, чтобы повторить попытку при различных исключениях. Нет никаких официальных указаний на то, что этот параметр предотвращает повторную попытку. Вы можете проверить страницу "Повторить попытку". для получения подробной информации.

person George    schedule 18.09.2019
comment
Ладно, тогда, может быть, это был плохой пример. Ни один из параметров повтора не имеет никакого эффекта на уровне задачи. - person Liam Meck; 18.09.2019
comment
Доступные параметры: предикат (Callable [Exception]), начальный (с плавающей запятой), максимум (с плавающей запятой), множитель (с плавающей запятой), крайний срок (с плавающей запятой). Какие из них вы модифицировали? Как вы измерили эффект от вашей модификации? Как вы определили, что используются настройки уровня очереди? Чего бы вы хотели достичь, изменив один или несколько параметров в этом списке? - person George; 20.09.2019

Служба поддержки Google Cloud подтвердила, что повторные попытки на уровне задач в настоящее время не поддерживаются. Документация для этой клиентской библиотеки неверна. Запрос функции существует здесь, https://issuetracker.google.com/issues/141314105.

person Liam Meck    schedule 23.09.2019

Параметры повтора на уровне задачи доступны в пакетной службе Google App Engine для очередей задач, Очереди задач. Если ваше приложение находится в GAE, что, как я предполагаю, связано с тем, что ваш вопрос помечен google-app-engine, вы можете переключиться с облачных задач на очереди задач GAE.

Конечно, если ваше приложение использует что-то эксклюзивное для облачных задач, например конечные точки бета-версии HTTP, связанная служба не будет работать (см. Список новые функции, и не беспокойтесь о команде« Список очередей », поскольку вы всегда можете увидеть это в конфигурации, которую вы будете использовать в связанном сервисе). За исключением этого, вот некоторые вещи, которые следует учитывать перед переключением на очереди задач.

Рекомендации

  • Предпочтение поставщика. Похоже, Google предпочитает облачные задачи. Из руководства по миграции push-очередей введение: «Облачные задачи теперь являются предпочтительным способом работы с push-очередями App Engine»
  • Заблокировать - даже если ваше приложение находится в GAE, перенос решения очереди в пакет GAE увеличивает вашу "блокировку" на хостинге GAE (т. е. вам будет еще труднее покинуть GAE, если вы когда-нибудь захотите изменить место запуска своего приложения, потому что вы потеряете решение для очереди задач, и вам придется иметь дело с этим в дополнение к работе с новым хостингом)
  • Очереди с повторением - раздел руководства по переходу из очередей задач GAE в облачные задачи Повторная попытка невыполненных задач предлагает создать выделенную очередь для каждого набора параметров повтора, а затем соответственно поставить задачи в очередь. Это может быть подходящим способом продолжить использование облачных задач.
person hlp    schedule 13.11.2019