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

标签 python django architecture celery celery-task

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

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

最佳答案

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

关于python - 多个工作节点上的 Django + Celery 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42112312/

相关文章:

python - python 中的 if/else

python - Mako 中的方 block 和防御

python - Haystack 使用的 ElasticSearch 索引因未知原因损坏

python - 在 Django 中通过 Amazon SES 发送电子邮件时如何更改显示名称?

javascript - 替换消息中出现的 n 次特定字符串

python - 在 C++ 中嵌入 Python : persistence of interpreter across execution

django - 如何防止Django中的post_save递归?

cocoa - Cocoa Mac OS X 应用程序中 Controller 对象数量的标准是什么?

java - 在事务结束时发送事件

python - Scrapy:FormRequest 不会自动填充 ASP.net 隐藏字段