Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为多个Django项目使用单个芹菜服务器_Python_Django_Celery - Fatal编程技术网

Python 为多个Django项目使用单个芹菜服务器

Python 为多个Django项目使用单个芹菜服务器,python,django,celery,Python,Django,Celery,我有3个单独的Django项目,它们共享同一台机器上运行的同一个DB。 我需要的是为他们配置芹菜。 现在我的问题是: 1.)我是否应该为单独的项目运行单独的芹菜守护进程,并在rabbitmq中设置不同的vHost和用户,我不想选择这些,因为这样会浪费资源或资源 2.)是否有一种方法可以将来自不同项目的所有任务定向到单个芹菜服务器 另外,在解决方案中有多方便?是的,您可以使用同一台芹菜服务器从不同的项目接收任务 # foo.py from celery import Celery app

我有3个单独的Django项目,它们共享同一台机器上运行的同一个DB。 我需要的是为他们配置芹菜。 现在我的问题是:

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

2.)是否有一种方法可以将来自不同项目的所有任务定向到单个芹菜服务器


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

是的,您可以使用同一台芹菜服务器从不同的项目接收任务

# 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
有一个单独的芹菜应用程序(或者只有一个文件),比如
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\u task
不会尊重
芹菜。但是,您可以使用,这样
芹菜\u ALWAYS\u Earge
将通过
发送任务

获得荣誉,项目A和项目B如何知道如何连接到代理?是少了一块,还是我少了什么?也许这是我的错