estoy usando empujar cola de tareas de GAE (python). Hay veces en que después de X minutos, el Y% de las tareas ha fallado. Para esta situación, quiero purgar la cola de tareas (no hay necesidad de ejecutarlas, eventualmente muchos fallarán).
Puedo configurar una tarea para que deje de ejecutarse si se reintenta más de 2 veces, pero si tengo 100 tareas que fallaron (300 ejecuciones = 100 + 200 reintentos) ¿cómo puedo detener las tareas restantes para ejecutar?
queue.yaml
queue:
- name: my-queue
mode: push
rate: 1/s
bucket_size: 10
max_concurrent_requests: 10
retry_parameters:
task_retry_limit: 2
Respuestas
1 para la respuesta № 1Me gustaría almacenar algunos valores en memcache, como number of tasks in queue
y timestamps of tasks that failed
.
Cada tarea necesitaría realizar estas tareas:
- en el inicio, calcule el porcentaje de rotación (en los últimos X minutos) y salga si el porcentaje es demasiado alto, o incremente el
number of tasks
contrarrestar y proceder. - en el fracaso, decrementar
number of tasks
contador y añadir una marca de tiempo a lafailed tasks
lista. - en el éxito, decrementar el
number of tasks
mostrador.
Para calcular el porcentaje de rodadura, tome la lista completa de failed tasks
y filtre las marcas de tiempo que son demasiado antiguas (hace más de X minutos). Ponga la nueva lista de nuevo en memcache. Entonces, toma el number of tasks
contrarrestar y calcular 100.0 * (number of failed tasks) / (number of tasks)
para obtener su porcentaje. Si excede el umbral de Y%, salga de su tarea inmediatamente.