关于蟒蛇芹菜的一些混乱

时间:2016-04-26 23:28:55

标签: python django celery

我把芹菜分成以下部分

  1. 芹菜
  2. 芹菜工人
  3. 芹菜守护进程
  4. 经纪人:Rabbimq或SQS
  5. 队列
  6. 结果后端
  7. 芹菜监视器(花)
  8. 我的理解

    1. 当我在django e中点击celery任务时,g tasks.add(1,2)。然后芹菜将该任务添加到队列中。如果上面列出的是4或5,我很困惑
    2. 当任务进入队列时工作人员获取该任务并从队列中删除
    3. 该任务的结果保存在Result Backend
    4. 我的困惑

      1. 芹菜守护进程和芹菜工人之间的差异
      2. Rabbitmq是否正在做队列工作。这是否意味着任务在Rabitmq或SQS中保存
      3. 花做什么。它是否监控工人或任务或队列或结果

2 个答案:

答案 0 :(得分:0)

首先,只是解释它是如何工作的。您的代码中运行了芹菜客户端。您致电tasks.add(1,2)并创建了新的Celery Task。该任务由Broker传输到队列。是的,队列在Rabbimq或SQS中持久存在。 Celery Daemon始终在运行并正在侦听新任务。当队列中有新任务时,它会启动一个新的Celery Worker来执行工作。

回答你的问题:

  1. 芹菜守护进程一直在运行,它开始了芹菜工人。

  2. 是Rabitmq或SQS正在进行队列工作。

  3. 使用芹菜监视器,您可以监控正在运行的任务数量,完成的数量,队列的大小等等。

答案 1 :(得分:0)

我认为nstoitsev的回答有好意但会产生一些混乱。 所以让我们试着澄清一下。

  • Celery worker是芹菜过程,负责执行 任务,配置为在后台运行而不是通常调用 芹菜守护进程。所以你可以考虑两者相同的事情。 为了澄清他对nstoitsev的回答的混淆,每个worker都可以有一个大于1的并发参数。在这种情况下,每个芹菜工作者都能够创建N子worker,直到达到并发参数并行执行任务,这通常也被称为工人。
  • 代理保存队列和交换,这意味着芹菜工作者可以使用名为AMQP的协议连接到代理并发布或使用消息。
  • Flower能够使用经纪人本身监控芹菜群集。基本上能够receive events来自所有工人。如果你禁用了结果后端,那么花也会起作用btw是芹菜Celery result backend的默认行为。

希望这有帮助。