Указание ограничения на повторение задач, поставленных в очередь с использованием отложенной библиотеки GAE

Мы выгружаем определенные трудоемкие задачи с использованием отложенной библиотеки GAE и хотели бы знать, как мы можем установить лимит повтора для этих загруженных задач. Мы сталкиваемся с проблемами, когда некоторые задачи повторяются навсегда, поскольку задача никогда не будет успешной из-за какого-либо un восстанавливаемого исключения.

  • Как мне управлять сторонними библиотеками Python с помощью Google App Engine? (virtualenv? pip?)
  • Как я могу оптимизировать этот код Google App Engine?
  • Механизм не работает для автоматизации входа в Gmail в Google Appengine
  • Начать бэкэнд с помощью async urlfetch в Google App Engine
  • Понимание сохранения глобального объекта в приложениях WSGI Python
  • i18n с jinja2 + GAE
  • Как сериализовать объекты db.Model для json?
  • Необязательный параметр URL в маршруте GAE webapp2
  • 3 Solutions collect form web for “Указание ограничения на повторение задач, поставленных в очередь с использованием отложенной библиотеки GAE”

    Согласно документации, _retry_options API deferred.defer можно использовать для передачи параметров повтора в соответствующий экземпляр Task() :

    _countdown, _eta, _headers, _name, _target, _transactional, _url, _retry_options , _queue: перешел в очередь задач – подробности см. в документации по очереди задач.

    Из документа Task() :

    введите описание изображения здесь

    введите описание изображения здесь

    И вы можете использовать TaskRetryOptions()'s :

    task_retry_limit

    Максимальное количество попыток повторной попытки для неудавшейся задачи.

    В точечных очередях счетчик увеличивается каждый раз, когда App Engine пытается выполнить задачу, вплоть до указанного task_retry_limit. Если указано task_age_limit, App Engine повторяет задачу до тех пор, пока не будут достигнуты оба предела.

    В вытягивающих очередях счетчик увеличивается каждый раз, когда задача сдана в аренду, вплоть до указанного task_retry_limit. Задачи удаляются автоматически после того, как они были арендованы в количестве, указанном в лимите.

    Примечание: ответ основан только на документации, я фактически не реализовал его, YMMV.

    Согласно документации

     queue: - name: fooqueue rate: 1/s retry_parameters: task_retry_limit: 7 task_age_limit: 2d - name: barqueue rate: 1/s retry_parameters: min_backoff_seconds: 10 max_backoff_seconds: 200 max_doublings: 0 - name: bazqueue rate: 1/s retry_parameters: min_backoff_seconds: 10 max_backoff_seconds: 200 max_doublings: 3 

    Проверьте значения HTTP-заголовка X-Appengine-Taskretrycount и X-Appengine-Taskexecutioncount в своей задаче.

    Если вы не хотите повторять задачу, вы можете увеличить отложенное исключение. PermanentTaskFailure . Это исключение будет регистрироваться только, задача не будет запущена снова.

    Различные способы доступа к заголовкам http:

    Для обработчиков HTTP, вызванных taskqueue: num_tries = self.request.headers.get ('X-AppEngine-TaskRetryCount')

    Для функций, запускаемых отложенной библиотекой: num_tries = webapp2.get_request (). Headers.get ('X-AppEngine-TaskRetryCount')

    Python - лучший язык программирования в мире.