Detect whether Celery is Available/Running Detect whether Celery is Available/Running python python

Detect whether Celery is Available/Running


Here's the code I've been using. celery.task.control.Inspect.stats() returns a dict containing lots of details about the currently available workers, None if there are no workers running, or raises an IOError if it can't connect to the message broker. I'm using RabbitMQ - it's possible that other messaging systems might behave slightly differently. This worked in Celery 2.3.x and 2.4.x; I'm not sure how far back it goes.

def get_celery_worker_status():    ERROR_KEY = "ERROR"    try:        from celery.task.control import inspect        insp = inspect()        d = insp.stats()        if not d:            d = { ERROR_KEY: 'No running Celery workers were found.' }    except IOError as e:        from errno import errorcode        msg = "Error connecting to the backend: " + str(e)        if len(e.args) > 0 and errorcode.get(e.args[0]) == 'ECONNREFUSED':            msg += ' Check that the RabbitMQ server is running.'        d = { ERROR_KEY: msg }    except ImportError as e:        d = { ERROR_KEY: str(e)}    return d


From the documentation of celery 4.2:

from your_celery_app import appdef get_celery_worker_status():    i = app.control.inspect()    availability = i.ping()    stats = i.stats()    registered_tasks = i.registered()    active_tasks = i.active()    scheduled_tasks = i.scheduled()    result = {        'availability': availability,        'stats': stats,        'registered_tasks': registered_tasks,        'active_tasks': active_tasks,        'scheduled_tasks': scheduled_tasks    }    return result

of course you could/should improve the code with error handling...


To check the same using command line in case celery is running as daemon,

  • Activate virtualenv and go to the dir where the 'app' is
  • Now run : celery -A [app_name] status
  • It will show if celery is up or not plus no. of nodes online

Source:http://michal.karzynski.pl/blog/2014/05/18/setting-up-an-asynchronous-task-queue-for-django-using-celery-redis/