Django Celery如何拥有多个CELERY应用

时间:2019-05-27 21:10:52

标签: python django rabbitmq celery

使用Django 2.2,python 3.6和celery 4.3.0

我有一个外部模块,该模块定义一个celery应用程序,以通过RabbitMQ(带有自己的用户,密码和虚拟主机的AMPQ)与服务器A上的工作人员进行通信

如果我在django项目之外使用此celery应用程序,它将按预期工作。

作为参考,这里是外部模块tasks.py:

import traceback
from celery import Celery

from worker_functions import cluster_call

BROKER = "amqp://user:password@serverA_ip/vhost"

app = Celery('lsworker', backend='amqp', broker=BROKER)
app.conf.update(CELERY_ACCEPT_CONTENT = ['json'])
app.conf.update(CELERY_TASK_SERIALIZER = 'json')
app.conf.update(CELERY_RESULT_SERIALIZER = 'json')


@app.task
def bridge(account, cmd, params):
    return cluster_call(account, cmd, params)

我在django项目中有一个celery应用程序。它遵循以下结构:

proj/settings.py
app/tasks.py

具有以下task.py:

# Create your tasks here
from celery import shared_task

@shared_task
def test_comm(string):
    return string

settings.py中CELERY_BROKER_URL='amqp://user:password@serverB_ip/vhost'的位置

如果django应用未使用前面提到的外部模块,则它将按预期工作。

但是,如果我尝试在django项目中同时使用两者,那么它将无法正常工作。外部模块中的应用程序会覆盖django中的应用程序,因此无论调用了哪个功能任务,所有任务都将发送到同一外部工作人员,该任务是从外部模块发送的,而不是它们在各自应用程序中的各自代理。

我在文档中的任何地方都找不到从创建的最后一个celery应用程序实例继承的魔术隐式全局变量的配置(观察到的行为),在任何地方都找不到任何有关如何拥有2个独立celery的文档应用程序在同一程序中共存。有人有线索吗?

我尝试弄乱变量或文件名,以查看是否可以避免覆盖: -更改“主要”名称 -更改名称空间 -重命名“ app”变量名称

谢谢

0 个答案:

没有答案