Celery 工作节点到底是什么?

What is a Celery worker node exactly?

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

当您 运行 一个 celery worker 时,它会创建一个父进程来管理 运行ning 任务。此进程处理簿记功能,例如 sending/receiving 队列消息、注册任务、终止挂起的任务、跟踪状态等。

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

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

原来这里间接记录了Celery节点:

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

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

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

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

  • Broker - Client 要求 Worker 工作的方式。
  • 应用程序 - Celery 的一个实例 class

这里要注意,Client、Broker、Worker都可以在不同的机器上,实际上可以有多个Client在不同的机器上,也可以有多个Worker在不同的机器上,只要使用相同的即可经纪人.

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

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

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

  • 执行池
  • 集群
  • 节点

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

Celery 的一个挫败感(我有)是你可以自由地与 Workers 交流,但不能与 Worker 执行池中的 运行ning 任务交流(出于这个原因,我正在创建一个新任务 class 用于交互式任务,但仍在发展中)。

节点只是集群中的一个Worker。简而言之,Node = Worker。一个 Cluster 是一些并行的 Worker 运行ning(根据我介绍的文档使用 celery multi)。 Cluster 只是在同一台机器上启动、停止和管理多个 worker 的一种便捷方式。

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

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