创建芹菜多个队列

时间:2015-02-05 10:37:37

标签: python celery

我有一个包含类别列表的配置文件

cat_link = {'cat1':[link1,link2....],'cat2':[link3,link4....],'cat3':[link5,link6....],'cat4':[link7,link8....]}

我想根据配置文件中定义的类别总数创建队列,当我处理特定类别的链接时,每个队列都应该处理自己的一组链接。

处理链接的任务是相同的。我只想要的是,每个类别的链接都应该在他们的特定队列中处理。

它应该是这样的: -

for category, link in cat_link.iteritems():
    process_link.apply_async(args=[link],
                             queue=category,)

我应该如何创建动态队列,请记住以后可以删除/添加任何类别?

我的celeryconfig怎么样?目前如下:

BROKER_URL = 'amqp://'
CELERY_RESULT_BACKEND = 'amqp://'

CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_ACCEPT_CONTENT=['json']
CELERY_TIMEZONE = 'Europe/Oslo'
CELERY_ENABLE_UTC = True

#Should I read my `cat_link` config setting in a loop and then create the queues??

我看到不同任务的队列不同,但同一任务可能有不同的队列吗?

1 个答案:

答案 0 :(得分:4)

如果您想要动态地使用不同的队列,

process_link.apply_async(args=[link1],
                         queue=queue1)

process_link.apply_async(args=[link2],
                         queue=queue2)

此外,您还必须在配置文件中插入以下内容

CELERY_CREATE_MISSING_QUEUES = True

但是你需要关心的一件事是当你开始工作时,你必须传递-Q'队列名'作为参数

前者

celery -A proj worker -l info -Q queue1,queue2

从该队列中消费'queuename'