tasks google gae engine appengine app python google-app-engine task-queue

python - gae - google queue



Especificación del límite de reintento para las tareas en cola utilizando la biblioteca diferida de GAE (3)

Compruebe los valores del encabezado http de X-Appengine-Taskretrycount y X-Appengine-Taskexecutioncount en su tarea.

Si no desea volver a intentar una tarea, puede plantear la excepción diferida . PermissionTaskFailure. Esta excepción se registrará solo, la tarea no se ejecutará nuevamente.

Diferentes formas de acceder a los encabezados http:

Para manejadores de http activados por taskqueue: num_tries = self.request.headers.get (''X-AppEngine-TaskRetryCount'')

Para las funciones desencadenadas por la biblioteca diferida: num_tries = webapp2.get_request (). Headers.get (''X-AppEngine-TaskRetryCount'')

Estamos descargando ciertas tareas que requieren mucho tiempo usando la biblioteca diferida de GAE y nos gustaría saber cómo podemos establecer el límite de reintento para esas tareas descargadas. Nos encontramos con problemas en los que ciertas tareas se vuelven a intentar para siempre ya que la tarea nunca tendrá éxito debido a alguna excepción no recuperable.


De acuerdo con la documentación

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


De acuerdo con la documentación, las _retry_options de la API deferred.defer se pueden usar para pasar opciones de reintento a la instancia Task() asociada:

_countdown, _eta, _headers, _name, _target, _transactional, _url, _retry_options , _queue: Pasado a la cola de tareas; consulte la documentación de la cola de tareas para obtener más información.

Del documento Task() :

...

Y puede usar la TaskRetryOptions()''s :

task_retry_limit

El número máximo de intentos de reintento para una tarea fallida.

En las colas de inserción, el contador se incrementa cada vez que App Engine intenta la tarea, hasta la task_retry_limit especificada. Si se especifica con task_age_limit, App Engine reintenta la tarea hasta que se alcancen ambos límites.

En las colas de espera, el contador se incrementa cada vez que se alquila la tarea, hasta la task_retry_limit especificada. Las tareas se eliminan automáticamente una vez que se han alquilado la cantidad de veces especificada en el límite.

Nota: la respuesta se basa únicamente en la documentación, no la implementé realmente, YMMV.