Detect whether Celery is Available/Running

后端 未结 7 500
遥遥无期
遥遥无期 2020-12-04 12:09

I\'m using Celery to manage asynchronous tasks. Occasionally, however, the celery process goes down which causes none of the tasks to get executed. I would like to be able t

相关标签:
7条回答
  • 2020-12-04 12:56

    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
    
    0 讨论(0)
提交回复
热议问题