配置Django / Celery将任务发送到其他代理

时间:2019-03-05 10:47:08

标签: python django rabbitmq celery

系统正在运行以Celery(4.0.0)和RabbitMQ作为代理的Django服务器(1.11.5)。

有必要将一些任务发送到远程服务器进行处理。此新服务器将安装自己的RabbitMQ,以用作代理。问题出在何时运行Django的服务器上,我们需要选择哪些任务在本地计算机上继续运行,以及哪些任务发送到新服务器。

由于某些架构原因,无法使用队列解决此问题,因此必须将任务发送到新代理。

是否可以在Django中创建两个不同的Celery应用程序(每个指向不同的代理),每个应用程序各自执行任务?怎么办?

1 个答案:

答案 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