它是Celery正在运行的实际处理器还是另一个进程?在花中,我可以在工作池中看到多个进程?这两者有什么不同?
答案 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节点:
简而言之,Celery使用一组术语,这些术语对于构建分布式工作系统非常有用。
有助于规划事物的术语包括:
在这一点上,请注意,客户端,代理和工作程序都可以位于不同的计算机上,实际上,只要它们使用相同的代理程序,就可以在不同的计算机上具有多个客户端,在不同的计算机上具有多个Worker。
那么,应用程序通常为Broker配置了URL,就不足为奇了。那就是所有应用程序,在所有使用相同代理URL的所有客户端和工作者中,都使用同一代理。
客户端通过代理发送(产生)消息,请求运行任务,工作人员读取(使用)这些消息。
现在这些术语都有一个地方:
每个工作人员都可以通过维护执行池来一次处理多个任务。该池可能是线程,或者(默认情况下)它是子进程。因此,Worker可能会将多个Pool进程作为子进程。
Celery的一大挫败感是,您可以与Workers自由交流,但不能与Workers Execution Pool中正在运行的任务进行交流(因此,我正在为交互任务创建一个新的Task类,但仍然如此)不断发展)。
节点只是集群中的一个工作器。简而言之,Node = Worker。集群是许多并行运行的Worker(根据我介绍的文档使用celery multi
)。群集只是在同一台计算机上启动,停止和管理多个工作程序的便捷方法。
尽管可能有许多集群都在消耗来自同一Broker的任务,并且它们可能在同一台计算机上(尽管有人会问为什么)或在不同的计算机上。
这就是芹菜节点……(在最充分的上下文中)。