多个工作节点上的 Django + Celery 任务

Posted

技术标签:

【中文标题】多个工作节点上的 Django + Celery 任务【英文标题】:Django + Celery tasks on multiple worker nodes 【发布时间】:2017-06-26 00:33:19 【问题描述】:

我在同一台 VM 上部署了 django(1.10) + celery(4.x)rabbitmq 是代理(在同一台机器上)。 我想在多节点架构上开发相同的应用程序,比如我可以复制多个工作节点,并扩展任务以快速运行。 这里,

    如何用 rabbitmq 为这个架构配置 celery? 在其他工作节点上,应该如何设置?

【问题讨论】:

ChillarAnand 的解决方案应该已经为您解决了。你还需要澄清一些事情吗? 【参考方案1】:

你应该在一个节点中拥有 borker 并对其进行配置,以便其他节点的工作人员可以访问它。

为此,您可以在 rabbitmq 上创建一个新用户/虚拟主机。

# add new user
sudo rabbitmqctl add_user <user> <password>

# add new virtual host
sudo rabbitmqctl add_vhost <vhost_name>

# set permissions for user on vhost
sudo rabbitmqctl set_permissions -p <vhost_name> <user> ".*" ".*" ".*"

# restart rabbit
sudo rabbitmqctl restart

从其他节点,你可以将任务排队,也可以只运行worker来消费任务。

from celery import Celery

app = Celery('tasks', backend='amqp',
broker='amqp://<user>:<password>@<ip>/<vhost>')

def add(x, y):
    return x + y

如果你有这样的文件(比如task.py),你可以使用 add.delay() 将任务排队。

你也可以用

celery worker -A task -l info

您可以在此处查看我的回答,以简要了解如何run tasks on remote machines。对于一步一步的过程,您可以查看我写的帖子on scaling celery。

【讨论】:

以上是关于多个工作节点上的 Django + Celery 任务的主要内容,如果未能解决你的问题,请参考以下文章

RabbitMQ 上的 Heroku、Django 和 celery

django/celery - 芹菜状态:错误:在时间限制内没有节点回复

如何在多个机器上搭建celery的集群环境

芹菜不启动多个工人

不同服务器上的 Django 和 celery,一旦任务完成,celery 能够向 django 发送回调

Python:使用celery处理多个服务器上的参数列表