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节点:
简而言之,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 节点......(在其最完整的上下文中)。
它是 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节点:
简而言之,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 节点......(在其最完整的上下文中)。