如何在Celery中使两个任务互斥?

时间:2015-02-23 09:29:30

标签: python-2.7 celery celery-task celerybeat

有没有办法禁止在Celery中同时运行两个不同的任务?我正在考虑定义一个并发级别为1的新队列,并将这些任务发送到该队列,但我找不到示例。这可能吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

是的,如果您不需要担心整体吞吐量,可以创建一个单独的队列,并拥有一个并发设置为1的专用工作人员。您可以根据需要创建任意数量的队列并配置每个工作人员从这些队列接收消息。

启动worker时,您可以传递-Q参数来设置其队列,并使用-c参数来设置它使用的线程数,如Queues和{{中所述3}}工人指南的部分。

celery -A my_project worker -l info -Q queue1 -c 1

然后,您可以使用Concurrency设置全局映射,以定义每个任务进入哪些队列。

CELERY_ROUTES = { 'my_app.tasks.task1': {'queue': 'queue1'}, 'my_app.tasks.task2': {'queue': 'queue2'}, }

或者,您可以根据Routing Guide在提交每个任务实例时指定队列。

task1.apply_async(queue='queue1')