如何确定Celery工作者在运行时消耗哪些队列?

时间:2015-04-22 07:24:16

标签: python 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:
    ...

1 个答案:

答案 0 :(得分:1)

经过一些交互式调试后,我发现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.