系统正在运行以Celery(4.0.0)和RabbitMQ作为代理的Django服务器(1.11.5)。
有必要将一些任务发送到远程服务器进行处理。此新服务器将安装自己的RabbitMQ,以用作代理。问题出在何时运行Django的服务器上,我们需要选择哪些任务在本地计算机上继续运行,以及哪些任务发送到新服务器。
由于某些架构原因,无法使用队列解决此问题,因此必须将任务发送到新代理。
是否可以在Django中创建两个不同的Celery应用程序(每个指向不同的代理),每个应用程序各自执行任务?怎么办?
答案 0 :(得分:0)
您可以创建两个celery应用并将celery.py重命名为celery_app.py,以避免自动导入。
from celery import Celery
app1 = Celery('hello', broker='amqp://guest@localhost//')
@app1.task
def hello1():
return 'hello world from local'
和
from celery import Celery
app2 = Celery('hello', broker='amqp://guest@remote//')
@app2.task
def hello2():
return 'hello world from remote'
并针对共享任务:
from celery import shared_task
@shared_task
def add(x, y):
return x + y
运行celery worker节点时:
celery --app=PACKAGE.celery_app:app worker