multiprocessing - celery 是如何工作的?

标签 multiprocessing celery worker celery-task broker

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

What's a Task Queue?

...

Celery communicates via messages, usually using a broker to mediate between clients and workers. To initiate a task the client adds a message to the queue, the broker then delivers that message to a worker.


什么是客户(这里)?什么是经纪人?为什么消息通过代理传递?为什么 Celery 会使用后端和队列进行进程间通信?
当我通过发出命令执行 Celery 控制台时
celery worker -A tasks --loglevel=info --concurrency 5
这是否意味着 Celery 控制台是一个工作进程,负责 5 个不同的进程并跟踪任务队列?当一个新任务被插入任务队列时,这个工作人员是否将任务/作业分配给了 5 个进程中的任何一个?

最佳答案

先说最后一个问题:

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

你是对的 - worker 控制 5 个进程。 worker 在 5 个进程之间分配任务。

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

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

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

经纪人和结果后端是完全独立的,需要不同类型的软件才能最佳运行。

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

关于multiprocessing - celery 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34706597/

相关文章:

python - 在 celery 工作人员内部存储数据的常见且明显的方式是什么?

python - celery 任务重复问题

python - 使用 Python 多处理在 worker 之间共享一个变量

python 多处理 - 单文件多个命令

python - 如何将大量数据传递给 celery

python - 如何并行运行多个 celery 任务?

ruby-on-rails - 对 Heroku 生产站点上的 Sidekiq 工作人员进行故障排除

javascript - 如何与 SharedWorker 共享数据

c - 多进程服务器还是多线程服务器?

python - Python 中两个函数的简单并行计算