Django-celery - 如何连续执行任务?

时间:2014-01-17 15:27:27

标签: django celery django-celery

我正在使用Celery 3.1。我只需要在最后一个任务结束时执行下一个任务。我怎样才能确保没有两个任务同时工作?我已经阅读了文档但我不清楚。

我有以下方案:

Task Main
    - Subtask 1
        - Subtask 2

我打电话给#34;任务主要"该过程将持续到结束(子任务2),没有任何新的"任务主要"开始。

我该如何保证?

2 个答案:

答案 0 :(得分:1)

如果我理解您只想逐个执行MainTask,并且想要在MainTask中调用子任务。如果不创建单独的队列和至少2个独立的工作人员,这是不可能的。因为如果您将存储在同一队列中,则所有任务都会将芹菜视为相同的任务。

解决方案是:

  1. 将MainTask映射到main_queue
  2. 为此队列启动单独的worker,如:  celeryd --concurrency = 1 --queue = main_queue
  3. 将子任务映射到sub_queue
  4. 为此队列启动单独的worker  celeryd --queue = sub_queue
  5. 应该工作!

    但我认为这是一个复杂的架构,如果您重新设计流程,可能会让您更容易。

    此外,您可以找到这个有用的(它适用于您,但它可以运行并行MainTask): 您应该尝试使用链,这是Celery的文档示例:http://docs.celeryproject.org/en/latest/userguide/tasks.html#avoid-launching-synchronous-subtasks

答案 1 :(得分:0)

一种策略是使用锁。 Celery任务指南在example处有一个http://docs.celeryproject.org/en/latest/tutorials/task-cookbook.html