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

How to make two tasks mutually exclusive in Celery?

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

谢谢!

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

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

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

然后您可以设置全局映射,使用 Routing Guide.

定义每个任务进入的队列

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

或者,您可以根据 Calling Tasks Guide.

在提交每个任务实例时指定队列

task1.apply_async(queue='queue1')