关于python中芹菜的一些困惑

2024-04-28 18:49:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我把芹菜分成以下几个部分

  1. 芹菜
  2. 芹菜工
  3. 芹菜守护者
  4. 经纪人:Rabbiq或SQS
  5. 排队
  6. 结果后端
  7. 芹菜监视器(花)

我的理解

  1. 当我在django e完成芹菜任务时任务.添加(1,2)。然后celery将该任务添加到队列中。我很困惑上面的清单是4还是5
  2. 当任务进入队列时,工作线程获取该任务并从队列中删除
  3. 该任务的结果保存在result Backend中

我的困惑

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

Tags: djangobackend队列进程经纪人result线程排队
2条回答

首先,简单地解释一下它是如何工作的。你的代码中有一个芹菜客户端。调用tasks.add(1,2)并创建一个新的Celery Task。该任务由Broker传输到队列。是的,队列在rabbiq或SQS中持久化。Celery Daemon始终在运行并侦听新任务。当队列中有新任务时,它会启动一个新的Celery Worker来执行该工作。在

回答您的问题:

  1. 芹菜守护进程始终在运行,它正在启动芹菜工人。

  2. 是的,Rabitmq或SQS正在执行队列的工作。

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

我认为nstoitsev的回答有很好的意图,但也造成了一些混乱。 所以让我们试着澄清一下。在

  • Celery worker是负责执行 任务,当配置为在后台运行时,通常会调用 芹菜守护者。所以你可以把这两件事看作是同一件事。 为了澄清nstoitsev答案的混乱,每个worker可以有一个大于1的并发参数。在这种情况下,每个celery worker都能够创建N个子worker,直到达到并行执行任务的concurrency参数,这通常也被称为worker。在
  • 代理持有队列并进行交换这意味着celery工作人员能够使用名为AMQP的协议连接到代理,并发布或使用消息。在
  • Flower能够使用代理本身监视芹菜集群。基本上能够从所有工人那里得到receive events。如果禁用了结果后端,即btw是芹菜Celery result backend的默认行为,Flower也可以工作。在

希望这有帮助。在

相关问题 更多 >