Search code examples
pythondjangocelerycelery-task

Test if a celery task is still being processed


How can I test if a task (task_id) is still processed in celery? I have the following scenario:

  1. Start a task in a Django view
  2. Store the BaseAsyncResult in the session
  3. Shutdown the celery daemon (hard) so the task is not processed anymore
  4. Check if the task is 'dead'

Any ideas? Can a lookup all task being processed by celery and check if mine is still there?


Solution

  • define a field (PickledObjectField) in your model to store the celery task:

    class YourModel(models.Model):
        .
        .
        celery_task = PickledObjectField()
        .
        .
    
        def task():
            self.celery_task = SubmitTask.apply_async(args = self.task_detail())
            self.save()
    

    In case your task is not specific on any model you should create one specifically for the celery tasks.

    or else I suggest using django-celery. It has a nice monitoring feature:
    http://ask.github.com/celery/userguide/monitoring.html#django-admin-monitor, saves the tasks details in a django model in a nice graphical way.