如何确定 Celery worker 在运行时正在使用哪些队列?

How to determine which queues a Celery worker is consuming at runtime?

作为健全性检查的一部分,我想编写一些代码以确保工作人员已根据给定的设置使用一组正确的队列启动。

Celery 是 运行 像这样:

celery worker -A my_app -l INFO -Q awesome_mode

我想在应用程序初始化后计算出 Celery 正在消耗哪些队列。

例如,我编了 app.queues:

app = Celery('my_app')
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)

if 'awesome_mode' in app.queues:
    ...

经过一些交互式调试后,我发现 app.amqp.queues 这是一个字典,其中键是队列的名称,值是 Queue.

不幸的是,字典在初始化后不会立即填充,但会在 worker_ready 信号后工作。

在应用程序初始化之后放置此代码似乎可行。它当然可以放在其他地方。

@worker_ready.connect
def worker_ready_handler(sender=None, **kwargs):
    print(app.amqp.queues.keys())

工人记录:

[2015-04-22 07:41:01,147: WARNING/MainProcess] ['celery', 'awesome_mode']
[2015-04-22 07:41:01,148: WARNING/MainProcess] celery@zaptop ready.