【问题标题】:How to make two tasks mutually exclusive in Celery?如何使 Celery 中的两个任务互斥?
【发布时间】:2015-04-24 14:01:20
【问题描述】:

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

谢谢!

【问题讨论】:

  • 您需要实现某种锁定机制。我是通过 redis 做到的。
  • 我不想去锁定,只有在没有其他选择的情况下..

标签: python-2.7 celery celery-task celerybeat


【解决方案1】:

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

启动worker时,您可以传递-Q 参数来设置其队列,并传递-c 参数来设置它使用的线程数,如Workers Guide 的QueuesConcurrency 部分所述.

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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 2020-08-29
    • 1970-01-01
    • 1970-01-01
    • 2015-10-19
    • 1970-01-01
    • 2011-12-06
    相关资源
    最近更新 更多