芹菜是如何工作的?
Posted
技术标签:
【中文标题】芹菜是如何工作的?【英文标题】:How does Celery work? 【发布时间】:2016-04-14 21:07:33 【问题描述】:我最近开始研究分布式计算以提高计算速度。我选择了Celery。但是,我对某些术语不是很熟悉。所以,我有几个相关的问题。
来自Celery docs:
什么是任务队列?
...
Celery 通过消息进行通信,通常使用代理在客户端和工作人员之间进行调解。为了启动任务,客户端将消息添加到队列中,然后代理将该消息传递给工作人员。
什么是客户(这里)?什么是经纪人?为什么要通过代理传递消息?为什么 Celery 会使用后端和队列进行进程间通信?
当我通过发出命令执行 Celery 控制台时
celery worker -A tasks --loglevel=info --concurrency 5
这是否意味着 Celery 控制台是一个工作进程,负责 5 个不同的进程并跟踪任务队列?当一个新任务被推入任务队列时,这个工作人员是否将任务/作业分配给 5 个进程中的任何一个?
【问题讨论】:
【参考方案1】:最后一个问题:
celery worker -A tasks --loglevel=info --concurrency 5
你是对的 - 工人控制 5 个进程。 Worker 在 5 个进程之间分配任务。
“客户端”是异步运行 celery 任务的任何代码。
有 2 种不同类型的通信 - 当您运行 apply_async
时,您向代理(最常见的是 rabbitmq)发送任务请求 - 这基本上是一组消息队列。
当工作人员完成后,他们将结果放入结果后端。
代理和结果后端是完全独立的,需要不同类型的软件才能以最佳方式运行。
两者都可以使用 RabbitMQ,但是一旦达到一定的消息速率,它将无法正常工作。最常见的组合是用于代理的 RabbitMQ 和用于结果的 Redis。
【讨论】:
感谢您提供简短信息。您说的是 RabbitMQ 作为代理,Redis 作为后端。 1.)这个memcached在哪里发挥作用。我见过很多论坛使用它作为消息队列。 2.)如果我在两个不同的控制台中执行了上述 celery worker 命令并从交互式 python 提交了一个任务..??我的意思是,我如何指定使用这个特定的工作控制台...?? memcached 可以用来代替 Redis。 Redis 可能是更好的选择。你的第二个问题没有意义。请再次阅读 celery 文档,然后在 SO 中提出一个新问题以上是关于芹菜是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章