什么是Celery工作者节点?

时间:2015-02-11 08:50:47

标签: celery

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

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

事实证明,此处间接记录了Celery节点:

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

简而言之,Celery使用一组术语,这些术语对于构建分布式工作系统非常有用。

  • 客户端-希望完成工作的应用程序
  • Worker-完成工作的应用程序

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

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

在这一点上,请注意,客户端,代理和工作程序都可以位于不同的计算机上,实际上,只要它们使用相同的代理程序,就可以在不同的计算机上具有多个客户端,在不同的计算机上具有多个Worker。

那么,应用程序通常为Broker配置了URL,就不足为奇了。那就是所有应用程序,在所有使用相同代理URL的所有客户端和工作者中,都使用同一代理。

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

现在这些术语都有一个地方:

  • 执行池
  • 集群
  • 节点

每个工作人员都可以通过维护执行池来一次处理多个任务。该池可能是线程,或者(默认情况下)它是子进程。因此,Worker可能会将多个Pool进程作为子进程。

Celery的一大挫败感是,您可以与Workers自由交流,但不能与Workers Execution Pool中正在运行的任务进行交流(因此,我正在为交互任务创建一个新的Task类,但仍然如此)不断发展)。

节点只是集群中的一个工作器。简而言之,Node = Worker。集群是许多并行运行的Worker(根据我介绍的文档使用celery multi)。群集只是在同一台计算机上启动,停止和管理多个工作程序的便捷方法。

尽管可能有许多集群都在消耗来自同一Broker的任务,并且它们可能在同一台计算机上(尽管有人会问为什么)或在不同的计算机上。

这就是芹菜节点……(在最充分的上下文中)。