Question

Comment puis-je tester si une tâche (task_id) est toujours traité dans céleri ? Je le scénario suivant:

  1. Démarrer une tâche dans une vue Django
  2. Rangez la BaseAsyncResult dans la session
  3. Arrêter le démon de céleri (dur) de sorte que la tâche n'est pas traitée plus
  4. Vérifiez si la tâche est 'morte'

Toutes les idées? une recherche peut toutes des tâches en cours de traitement par le céleri et vérifier si le mien est toujours là?

Était-ce utile?

La solution

définir un champ (PickledObjectField) dans votre modèle pour stocker la tâche de céleri:

class YourModel(models.Model):
    .
    .
    celery_task = PickledObjectField()
    .
    .

    def task():
        self.celery_task = SubmitTask.apply_async(args = self.task_detail())
        self.save()

Dans le cas où votre tâche n'est pas spécifique sur un modèle, vous devez créer un spécialement pour les tâches de céleri.

ou bien je suggère d'utiliser django-céleri. Il dispose d'une fonction de surveillance de Nice:
http://ask.github.com/celery/userguide/monitoring .html # django-admin-moniteur , enregistre les détails des tâches dans un modèle de django d'une manière graphique agréable.

Autres conseils

Je pense qu'il ya une meilleure façon que de stocker un objet de tâche dans le modèle. Par exemple, si vous voulez vérifier si un groupe de travail (parallèle) ont terminé:

# in the script you launch the task
from celery import group

job = group(
    task1.s(param1, param2),
    task2.s(param3, param4)
)
result = job.apply_async()
result.save()

# save the result ID in your model
your_obj_model = YourModel.objects.get(id='1234')
your_obj_model.task_id = result.id
your_obj_model.save()

Alors, selon vous,

from celery.result import GroupResult
# ...
task_result = GroupResult.restore(your_obj_model.task_id)
task_finished = task_result.ready()
# will be True or False
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top