2017-07-11 2 views
1

Pouvez-vous expliquer ce que je dois utiliser: task_reject_on_worker_lost ou task_acks_late et comment ils sont différents? Pourquoi Celery n'exécute-t-il pas de nouvelle tâche après exception quand task_acks_late a la valeur True?Quelle est la différence entre task_reject_on_worker_lost et task_acks_late dans Celery?

Dans Céleri docs:

Même si task_acks_late est activé, le travailleur accusera des tâches lorsque le processus de travail les exécuter sort brusquement

Qu'est-ce que cela signifie « sort brusquement »? Une exception sera-t-elle levée?

Lorsque Celery réessaie une tâche lorsque task_acks_late est True et task_reject_on_worker_lost est ?

Répondre

1

Si vous voulez réessayer après une exception, vous pouvez passer des arguments au décorateur.

@app.task(max_retries=10) 
def task(*args, **kwargs): 
    #stuff 

Les sorties abruptes désignent le travailleur qui n'est pas tué. Si vous utilisez task_acks_late alors le travailleur retirera l'élément de la file d'attente à la fin de la tâche plutôt que le début. Cependant, si le processus de travail est tué, la tâche est toujours reconnue même si elle n'est pas terminée. task_reject_on_worker_lost remettra en file d'attente le message si l'événement ci-dessus se produit afin que vous ne perdiez pas la tâche.

Sources: http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-task_reject_on_worker_lost

http://docs.celeryproject.org/en/latest/userguide/configuration.html#task-acks-late

Vous devriez être en mesure d'utiliser ces deux paramètres en même temps sans problème.