Celery工作节点究竟是什么



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

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

然后,该进程生成N个实际执行单个任务的辅助进程。该数字由启动辅助程序时的-c参数确定:http://docs.celeryproject.org/en/latest/userguide/workers.html#concurrency

子进程可以使用多种策略来实现,并且在使用-P参数启动工作进程时进行配置。可能的值包括: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-完成工作的应用程序

有助于计划的术语包括:

  • 经纪人-客户要求工人工作的方式
  • Application-Celery类的一个实例

在这一点上,请注意,Client、Broker和Worker都可以在不同的机器上,事实上,只要它们使用相同的Broker,就可以在不同机器上有多个Client和多个Worker。

因此,应用程序通常使用URL配置Broker也就不足为奇了。也就是说,所有的应用程序、所有的客户端和Worker都在使用相同的Broker URL,因此都在使用同一个Broker。

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

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

  • 执行池
  • 群集
  • 节点

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

Celery的一个挫折(我有)是,你可以自由地与Workers通信,但不能与Worker的执行池中正在运行的任务通信(因此,我正在为交互式任务创建一个新的Task类,但它仍在发展中)。

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

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

这就是芹菜节点。。。(在最充分的背景下)。

相关内容

  • 没有找到相关文章

最新更新