Celery 工作节点到底是什么?

ali*_*sav 3 celery

它是运行 Celery 的实际处理器还是另一个进程?在花中,我可以在工作池中看到多个进程吗?这两者之间有什么区别?

Ber*_*ner 11

事实证明,Celery 节点是间接记录在这里的:

https://docs.celeryproject.org/en/latest/reference/celery.bin.multi.html#celery.bin.multi.MultiTool.MultiParser.Node

简而言之,Celery 使用了一组在构建分布式工作系统时有助于理解的术语。

  • 客户端 - 想要看到工作完成的应用程序
  • Worker - 完成工作的应用程序

有助于规划事情的术语包括:

  • 经纪人 - 客户要求工人工作的方式。
  • 应用程序 - Celery 类的实例

此时需要注意的是,Client、Broker、Worker都可以在不同的机器上,而且实际上可以有多个Client在不同的机器上,也可以有多个Worker在不同的机器上,只要它们使用同一个Broker即可。

那么,应用程序通常会为 Broker 配置 URL,也就不足为奇了。这就是所有应用程序,所有客户端和工作人员都使用相同的 Broker URL,因此都使用相同的 Broker。

客户端通过代理发送(生成)消息,请求运行任务,工作人员读取(消费)这些消息。

现在这些术语都有了一席之地:

  • 执行池
  • 节点

每个Worker可以通过维护一个执行池同时处理多个任务。该池可能是线程,或者(默认情况下)它是子进程。因此,一个 Worker 可能有多个 Pool 进程作为子进程。

Celery 的一个(我的)挫败感是,您可以与 Workers 进行自由通信,但不能与 Worker 执行池中正在运行的任务进行通信(出于这个原因,我正在为交互式任务创建一个新的 Task 类,但它仍在不断发展)。

节点只是集群中的一个工作线程。简而言之,节点=工作者。集群是许多并行运行的工作人员(celery multi按照我介绍的文档使用)。集群只是一种在同一台机器上启动、停止和管理多个工作线程的便捷方式。

可能有许多集群都消耗来自同一个代理的任务,并且它们可能位于同一台机器上(尽管有人会想知道为什么)或位于不同的机器上。

这就是 Celery 节点......(在其最完整的上下文中)。


小智 5

当您运行 celery worker 时,它会创建一个父进程来管理正在运行的任务。这个过程处理簿记功能,如发送/接收队列消息、注册任务、杀死挂起的任务、跟踪状态等。

然后,该进程产生 N 个实际执行各个任务的子工作进程。该数字由-c启动工作程序时的参数决定:http : //docs.celeryproject.org/en/latest/userguide/workers.html#concurrency

子进程可以使用多种策略实现,并在使用-P参数启动工作程序时进行配置。可能的值包括:prefork、eventlet、gevent、threads/solo。