芹菜如何运作?

时间:2016-01-10 14:34:43

标签: multiprocessing celery worker celery-task broker

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

来自Celery docs

  

什么是任务队列?

     

...

     

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

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

当我通过发出命令

执行Celery控制台时
celery worker -A tasks --loglevel=info --concurrency 5

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

1 个答案:

答案 0 :(得分:2)

最后一个问题:

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

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

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

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

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

代理和结果后端非常独立,需要不同类型的软件才能最佳地运行。

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