我最近开始致力于分布式计算以提高计算速度。我选择了 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/