当前位置: 首页 > 知识库问答 >
问题:

芹菜是如何工作的?

庞彬
2023-03-14

我最近开始研究分布式计算以提高计算速度。我选择了芹菜。然而,我对一些术语不太熟悉。所以,我有几个相关的问题。

来自芹菜文档:

...

Celery通过消息进行通信,通常使用代理在客户机和工作人员之间进行调解。为了启动任务,客户机将消息添加到队列中,然后代理将该消息传递给工作者。

什么是客户端(这里)?什么是经纪商?为什么消息通过代理传递?为什么 Celery 会使用后端和队列进行进程间通信?

当我通过发出命令来执行Celery控制台时

celery worker -A tasks --loglevel=info --concurrency 5

这是否意味着Celery控制台是一个负责5个不同进程并跟踪任务队列的工作进程?当新任务被推入任务队列时,该工作人员是否将任务/作业分配给5个进程中的任何一个?

共有1个答案

闾丘成双
2023-03-14

先问最后一个问题:

celery worker -A tasks --loglevel=info --concurrency 5

你是对的 - 工作人员控制5个进程。工作线程在 5 个进程之间分配任务。

“客户端”是异步运行芹菜任务的任何代码。

有 2 种不同类型的通信 - 当您运行apply_async向代理发送任务请求(最常见的是 rabbitmq) - 这基本上是一组消息队列。

当工作人员完成后,他们将结果放入结果后端。

代理和结果后端是完全独立的,需要不同类型的软件才能以最佳方式运行。

您可以将RabbitMQ用于两者,但一旦您达到一定的消息速率,它将无法正常工作。最常见的组合是RabbitMQ用于代理,Redis用于结果。

 类似资料:
  • 现在,我想将< code>register事件发布到某个特殊的交换,我可以使用celery远程检索和处理它。 实际上,我已经使用了函数来实现这一点,但是它必须传递来指示应该执行哪个任务并消费它。所以它似乎不太适合我的目标。 我想要的就是这样: 向某些发布消息; 远程机器1订阅此或并捕获消息,用于执行任务; 远程机器2-与机器1相同但执行另一个任务-接收(可能需要回复某些) 例如,就像这个工作流一样

  • 我使用芹菜独立(不在Django内)。我计划在多台物理机器上运行一种辅助任务类型。该任务执行以下操作 接受XML文档。 转换它。 进行多个数据库读写 我正在使用PostgreSQL,但这同样适用于使用连接的其他存储类型。过去,我使用数据库连接池来避免在每次请求时创建新的数据库连接,或者避免连接打开时间过长。然而,由于每个芹菜工人都在一个单独的过程中运行,我不确定他们实际上如何能够共享游泳池。我是不

  • 问题内容: 如何在Windows中运行celery worker而不创建Windows Service?有什么比喻吗? 问题答案: 它的完成方式与Linux中相同。将目录更改为包含celery任务的模块并调用效果很好。

  • 问题内容: 我正在尝试创建Windows服务来启动Celery。我碰到了一篇使用Task Scheduler 来做的文章。但是,它似乎启动了许多芹菜实例,并不断消耗内存直到机器死机。有什么方法可以将其作为Windows服务启动吗? 问题答案: 我从另一个网站得到了答案。Celeryd(Celery的守护程序服务)作为粘贴应用程序运行,在这里搜索“ Paster Windows Service”会导

  • 是否可以在Celery中使用不同的消息代理? 例如:我想使用PostgreSQL而不是RabbitMQ。

  • 我们正在运行气流1.10.1与芹菜。面对多个打开的连接。在DAG启动时,UI会挂起几分钟。 亮点: 所有节点都是裸金属的:CPU:40,MHz 2494.015,RAM 378G,10Gb NIC- MySQL MySQL连接: Worker.cfg Scheduler.cfg: 另外,我正在运行1000个简单任务,比如或