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.