python - results - celery_result_backend django
Cómo inspeccionar y cancelar las tareas de apio por nombre de tarea (4)
Estoy usando Celery (3.0.15) con Redis como corredor.
¿Existe una forma sencilla de consultar la cantidad de tareas con un nombre dado que existen en una cola de apio?
Y, como seguimiento, ¿hay una manera de cancelar todas las tareas con un nombre dado que existen en una cola de apio?
He revisado la Guía de supervisión y administración y no veo una solución allí.
Hay un problema que las respuestas anteriores no han abordado y pueden deshacerse de las personas si no lo saben.
Entre las soluciones ya publicadas, usaría la de Danielle''s con una pequeña modificación: importaría la tarea a mi archivo y usaría su atributo .name
para que el nombre de la tarea pasara a .tasks_by_type()
.
app.control.revoke(
[uuid for uuid, _ in
celery.events.state.State().tasks_by_type(task.name)])
Sin embargo, esta solución ignorará aquellas tareas que se han programado para una ejecución futura. Como algunas personas que comentaron otras respuestas, cuando verifiqué lo que .tasks_by_type()
, tenía una lista vacía. Y de hecho mis colas estaban vacías. Pero sabía que había tareas programadas para ser ejecutadas en el futuro y éstas eran mi objetivo principal. Pude verlos ejecutando celery -A [app] inspect scheduled
pero no se vieron afectados por el código anterior.
Logré revocar las tareas programadas haciendo esto:
app.control.revoke(
[scheduled["request"]["id"] for scheduled in
chain.from_iterable(app.control.inspect().scheduled()
.itervalues())])
app.control.inspect().scheduled()
devuelve un diccionario cuyas claves son nombres de trabajadores y los valores son listas de información de programación (por lo tanto, la necesidad de chain.from_iterable
que se importa de itertools
). La información de la tarea se encuentra en el campo "request"
de la información de programación e "id"
contiene la ID de la tarea. Tenga en cuenta que incluso después de la revocación, la tarea programada se mostrará entre las tareas programadas. Las tareas programadas que se revocan no se eliminarán de la lista de tareas programadas hasta que caduquen sus temporizadores o hasta que Celery realice alguna operación de limpieza. (El reinicio de los trabajadores provoca tal limpieza).
Parece que la flower
proporciona monitoreo:
https://github.com/mher/flower
Monitoreo en tiempo real usando Celery Events
Progreso e historial de tareas Capacidad para mostrar detalles de tareas (argumentos, hora de inicio, tiempo de ejecución y más) Gráficos y estadísticas Control remoto
Ver el estado y las estadísticas del trabajador. Cerrar y reiniciar las instancias del trabajador. Controlar el tamaño del grupo de trabajadores y las configuraciones de autoescala. Ver y modificar las colas que consume una instancia del trabajador. Ver las tareas actualmente en ejecución. Ver las tareas programadas (ETA / cuenta atrás). visor Revocar o terminar tareas API de HTTP
Autenticación OpenID
Puede hacer esto en una solicitud:
app.control.revoke([
uuid
for uuid, _ in
celery.events.state.State().tasks_by_type(task_name)
])
# Retrieve tasks
# Reference: http://docs.celeryproject.org/en/latest/reference/celery.events.state.html
query = celery.events.state.tasks_by_type(your_task_name)
# Kill tasks
# Reference: http://docs.celeryproject.org/en/latest/userguide/workers.html#revoking-tasks
for uuid, task in query:
celery.control.revoke(uuid, terminate=True)