89 votes

Céleri - Obtenir l'identifiant de la tâche en cours

Comment puis-je obtenir le task_id valeur pour une tâche à partir de l'intérieur de la tâche? Voici mon code:

from celery.decorators import task
from django.core.cache import cache

@task
def do_job(path):
    "Performs an operation on a file"

    # ... Code to perform the operation ...

    cache.set(current_task_id, operation_results)

L'idée est que lorsque je crée une nouvelle instance de la tâche, j'ai récupérer l' task_id de l'objet tâche. J'ai ensuite utiliser l'id de la tâche de déterminer si la tâche est terminée. Je n'est pas envie de garder une trace de la tâche par l' path de la valeur parce que le fichier est "nettoyé" après la fin de la tâche, et peut ou peut ne pas exister.

Dans l'exemple ci-dessus, comment pourrais-je obtenir la valeur de current_task_id?

136voto

HighCat Points 1088

Depuis le Céleri 2.2.0, les informations relatives aux cours d'exécution de la tâche est enregistrée à la tâche.demande (il s'appelle «le contexte»). Donc, vous devriez obtenir l'id de la tâche à partir de ce contexte (pas de mot-clé arguments, qui sont déconseillées):

@task
def do_job(path):
    cache.set(do_job.request.id, operation_results)

La liste de tous les champs disponibles est décrite ici: http://celery.readthedocs.org/en/latest/userguide/tasks.html?highlight=requestcontext#context

10voto

asksol Points 9574

Le céleri définit certains arguments de mot clé par défaut si la tâche les accepte. (vous pouvez les accepter soit en utilisant ** kwargs, soit en les listant spécifiquement)

 @task
def do_job(path, task_id=None):
    cache.set(task_id, operation_results)
 

La liste des arguments de mot clé par défaut est documentée ici: http://ask.github.com/celery/userguide/tasks.html#default-keyword-arguments

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X