python - 为多个 Django 项目使用单个 Celery 服务器

标签 python django celery

我有 3 个独立的 Django 项目共享在同一台机器上运行的同一个数据库。 我需要的是为他们配置 Celery。 现在我的问题是:

1.) 我是否应该为单独的项目运行单独的 celery 守护进程,并在 rabbitmq 中设置不同的虚拟主机和用户,我不想选择,因为这会浪费资源或

2.) 有没有一种方法可以将来自不同项目的所有任务定位到单个 celery 服务器。

此外,supervisord 会多么方便?在解决方案中?

最佳答案

是的,您可以使用同一个 celery 服务器从不同的项目接收任务。

有一个单独的 celery 应用程序(或只有一个文件)说 foo 它具有在不同项目中使用的所有任务。

# foo.py    
from celery import Celery

app = Celery(broker='amqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y

@app.task
def sub(x, y):
    return x - y

启动一个worker来运行任务

celery worker -l info -A foo

现在从项目 A 中,您可以调用 add

import celery

celery.current_app.send_task('foo.add', args=(1, 2))

从项目 B 中,您可以调用 sub

import celery

celery.current_app.send_task('foo.sub', args=(1, 2))

您可以使用 supervisord 来管理 celery worker。

由于 send_task 不遵守 CELERY_ALWAYS_EAGER,因此这种方法对于测试来说可能稍微困难一些。但是你可以使用 this snippet这样 CELERY_ALWAYS_EAGER 就会被 send_task 接受。

关于python - 为多个 Django 项目使用单个 Celery 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41502940/

相关文章:

django - Bootstrap 模态、django for 循环和模型

celery - 在客户端/生产者上记录 celery

django - 用于 celery 单元测试的内存代理

Python:os.chdir() 在 for 循环中不起作用?

javascript - 创建决策 TreeMap

python - 如何在 python 社交身份验证中通过 facebook uid 查找用户?

django - 使用 Nuxtjs 访问 Django api 时出现 CORS 错误

python - 使用 redis-py 更改 PubSub 订阅

Python Tkinter 回调函数在主循环之前执行

docker - 在Docker中使用包含 “,”的shell命令