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

时间:2017-01-06 09:46:53

标签: python django celery

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

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

2。)有没有办法可以将不同项目中的所有任务都定位到单个芹菜服务器。

另外,supervisord在解决方案中有多方便?

1 个答案:

答案 0 :(得分:1)

是的,您可以使用相同的芹菜服务器从单独的项目中接收任务。

有一个单独的芹菜应用程序(或只是一个文件)说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

启动工作人员来运行任务

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来管理芹菜工人。

这种方法可能稍微难以进行测试,因为send_task不会尊重CELERY_ALWAYS_EAGER。但是,您可以使用this snippet,以便CELERY_ALWAYS_EAGER尊重send_task