使用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”变量名称
谢谢