如何在不同的机器上设置芹菜工人?

Posted

技术标签:

【中文标题】如何在不同的机器上设置芹菜工人?【英文标题】:How to set up celery workers on separate machines? 【发布时间】:2012-05-02 21:45:25 【问题描述】:

我是 celery 新手。我知道如何安装和运行一台服务器,但我需要将任务分发到多台机器上。 我的项目使用 celery 将传递给 Web 框架的用户请求分配给不同的机器,然后返回结果。 我阅读了文档,但没有提到如何设置多台机器。 我错过了什么?

【问题讨论】:

【参考方案1】:

我的理解是,您的应用会将请求推送到队列系统(例如 rabbitMQ),然后您可以在不同的机器上启动任意数量的工作人员(可以访问与提交任务的应用相同的代码)。他们将从消息队列中挑选出任务,然后开始处理它们。完成后,他们将更新墓碑数据库。

这样做的结果是您不必做任何特别的事情来启动多个工人。只需在不同的相同(相同源代码树)机器上启动它们。

拥有消息队列的服务器不必与拥有worker的服务器相同,也不必与提交作业的机器相同。您只需将消息队列的位置放在您的celeryconfig.py 中,所有机器上的所有工作人员都可以从队列中提取作业来执行任务。

【讨论】:

你是对的!但是主服务器是如何知道所有工作人员的? 主服务器是什么意思? @I'mTravelerClown 我认为您将分布式环境与主从环境混淆了。在基于 celery 的环境中没有主服务器,但有许多带有工作人员的节点。您可能需要更好地解释您的问题。 对不起,这是我的问题。我的“主服务器”是指一个节点,它是一个排队系统,所有工作人员都设置在其他机器上。我认为工作人员需要配置才能知道谁是节点。对吗? @lajarre 你确定吗?工人肯定需要知道tasks.add(在您链接到的示例中)指的是什么,不是吗?【参考方案2】:

我的部署方式是这样的:

    在 Heroku 实例上克隆您的 django 项目(这将运行前端) 添加 RabitMQ 作为插件并配置它 将您的 django 项目克隆到另一个 heroku 实例(称为 worker),您将在其中运行 celery 任务

【讨论】:

以上是关于如何在不同的机器上设置芹菜工人?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用芹菜工人将 django 项目部署到谷歌云?

如何优雅地重启芹菜工人?

芹菜不启动多个工人

码头工人群或牧场牛中的芹菜工人

芹菜工人在 aws 弹性豆茎中失败 [退出:芹菜工人(退出状态 1;未预期)]

芹菜工人无法连接到 docker 实例上的 redis