J'ai lu le document et recherché mais je n'arrive pas à trouver une réponse claire:
Pouvez-vous annuler une tâche déjà en cours d'exécution? (comme dans la tâche a commencé, prend un certain temps, et à mi-chemin, elle doit être annulée)
J'ai trouvé cela dans le doc sur Celery FAQ
>>> result = add.apply_async(args=[2, 2], countdown=120)
>>> result.revoke()
Mais je ne sais pas si cela annulera les tâches en file d'attente ou si cela tuera un processus en cours sur un travailleur. Merci pour toute lumière que vous pouvez jeter!
la source
Dans Celery 3.1, l' API de révocation des tâches est modifiée.
Selon la FAQ sur le céleri , vous devez utiliser result.revoke:
ou si vous n'avez que l'identifiant de la tâche:
la source
La réponse de @ 0x00mh est correcte, mais des documents récents sur le céleri disent que l'utilisation de l'
terminate
option est " un dernier recours pour les administrateurs " car vous pouvez accidentellement mettre fin à une autre tâche qui a commencé à s'exécuter entre-temps. Une meilleure solution est peut-être la combinaisonterminate=True
avecsignal='SIGUSR1'
(ce qui provoque le déclenchement de l'exception SoftTimeLimitExceeded dans la tâche).la source
SoftTimeLimitExceeded
est déclenché dans ma tâche, ma logique de nettoyage personnalisée (implémentée viatry
/except
/finally
) est appelée. C'est beaucoup mieux, à mon avis, que ce queAbortableTask
propose ( docs.celleryproject.org/en/latest/reference / ... ). Avec ce dernier, vous avez besoin d'un backend de résultats de base de données et vous devez vérifier manuellement et à plusieurs reprises l'état d'une tâche en cours pour voir si elle a été abandonnée.worker_prefetch_multiplier = 1
depuis que j'ai juste quelques tâches de longue durée, la terminaison devrait être bien - puisqu'aucune autre tâche ne sera effectuée par la fin - ai-je obtenu cela correctement? @spicyramenConsultez les options suivantes pour les tâches: time_limit , soft_time_limit (ou vous pouvez le définir pour les travailleurs). Si vous souhaitez contrôler non seulement l'heure d'exécution, consultez l' argument expires de la méthode apply_async.
la source
De plus, insatisfaisant, il existe un autre moyen (abandonner la tâche) d'arrêter la tâche, mais il y a beaucoup de manque de fiabilité, plus de détails, voir: http://docs.celleryproject.org/en/latest/reference/celery.contrib.abortable .html
la source