xticks barplot python django celery message-passing

python - barplot - ¿Cancelar una tarea que ya se está ejecutando con Apio?



pandas plot (4)

Consulte las siguientes opciones para las tareas: time_limit , soft_time_limit (o puede configurarlo para los trabajadores). Si desea controlar no solo el tiempo de ejecución, vea el argumento expires del método apply_async.

He estado leyendo el documento y buscando pero parece que no puedo encontrar una respuesta directa:

¿Puedes cancelar una tarea ya en ejecución? (Como en la tarea ha comenzado, toma un tiempo, y la mitad debe cancelarse)

Lo encontré en el documento en las Preguntas frecuentes sobre el apio

>>> result = add.apply_async(args=[2, 2], countdown=120) >>> result.revoke()

Pero no estoy seguro de si esto cancelará las tareas en cola o si matará un proceso en ejecución en un trabajador. Gracias por cualquier luz que puedas arrojar!


En Apio 3.1, la API de revocación de tareas cambia.

De acuerdo con las preguntas frecuentes sobre Apio , debes usar result.revoke:

>>> result = add.apply_async(args=[2, 2], countdown=120) >>> result.revoke()

o si solo tienes la identificación de la tarea:

>>> from proj.celery import app >>> app.control.revoke(task_id)


La respuesta de @ 0x00mh es correcta, sin embargo, los docs apio recientes dicen que el uso de la opción de terminate es " un último recurso para los administradores " porque puede terminar accidentalmente otra tarea que comenzó a ejecutarse mientras tanto. Posiblemente, una mejor solución es combinar terminate=True con signal=''SIGUSR1'' (lo que hace que la excepción SoftTimeLimitExceeded se levante en la tarea).


revocar cancela la ejecución de la tarea. Si se revoca una tarea, los trabajadores ignoran la tarea y no la ejecutan. Si no usa revocaciones persistentes, su tarea se puede ejecutar después del reinicio del trabajador.

http://docs.celeryproject.org/en/latest/userguide/workers.html#worker-persistent-revokes

revoke tiene una opción de finalización que es False por defecto. Si necesita matar la tarea de ejecución, debe establecer terminar en True .

>>> from celery.task.control import revoke >>> revoke(task_id, terminate=True)

http://docs.celeryproject.org/en/latest/userguide/workers.html#revoke-revoking-tasks