芹菜如何运作?

jel*_*ikk 7 worker multiprocessing celery broker celery-task

我最近开始致力于分布式计算,以提高计算速度.我选择了芹菜.但是,我对某些术语不太熟悉.所以,我有几个相关的问题.

来自Celery文档:

什么是任务队列?

...

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

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

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

celery worker -A tasks --loglevel=info --concurrency 5
Run Code Online (Sandbox Code Playgroud)

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

scy*_*ale 12

先说最后一个问题:

celery worker -A tasks --loglevel=info --concurrency 5
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

经纪商和结果后端是完全独立的,需要不同类型的软件才能发挥最佳功能。

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