我有3个独立的Django项目共享在同一台机器上运行的相同数据库。 我需要的是为它们配置Celery。 现在我的问题是:
1。)我是否应该为单独的项目运行单独的celery守护进程,并在rabbitmq中设置不同的vhosts和用户,我不想选择,因为这会浪费资源或
2。)有没有办法可以将不同项目中的所有任务都定位到单个芹菜服务器。
另外,supervisord在解决方案中有多方便?
答案 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
。