Django + Celery在多个工作节点上执行任务

时间:2017-02-08 11:49:44

标签: python django architecture celery celery-task

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

  1. 如何使用rabbitmq为这种架构配置芹菜?
  2. 在其他工作节点上,应该设置什么?

1 个答案:

答案 0 :(得分:9)

您应该在一个节点中安装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

从其他节点,您可以排队任务,也可以只运行工作人员来执行任务。

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