我有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))

您可以使用主管,来管理 celery worker 。

由于send_task不尊重CELERY_ALWAYS_EAGER,因此这种方法可能很难测试。但是,您可以使用this snippet,以便CELERY_ALWAYS_EAGER尊重send_task

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

10-16 06:23