Использование Django 2.2, python 3.6 и сельдерея 4.3.0
У меня есть внешний модуль, который определяет приложение сельдерея для связи с работником на сервере A с rabbitMQ (AMPQ со своим собственным пользователем, паролем и vhost)
Если я использую это приложение для сельдерея ЗА ПРЕДЕЛАМИ проекта django, оно будет работать как положено.
Для справки вот внешний модуль 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. Из этой структуры следует:
proj/settings.py
app/tasks.py
со следующими заданиями.py:
# Create your tasks here
from celery import shared_task
@shared_task
def test_comm(string):
return string
Где CELERY_BROKER_URL='amqp://user:password@serverB_ip/vhost'
в settings.py
Если приложение django НЕ использует упомянутый ранее внешний модуль, оно работает как положено.
Однако, если я попытаюсь использовать оба в проекте django, это не сработает. Приложение из внешнего модуля переопределяет приложение из django, поэтому независимо от того, какие функциональные задачи вызываются, все задачи отправляются одному и тому же внешнему сотруднику, одному из внешнего модуля, а не его соответствующим посредникам в соответствующих приложениях.
Я не могу нигде найти в документе упоминание о неявных конфигурациях магических неявных глобальных переменных, которые наследуются от последнего созданного экземпляра приложения сельдерея (наблюдаемое поведение) и нигде не могу найти никакой документации о том, как иметь 2 независимых сельдерея. приложение сосуществует в одной программе. У кого-нибудь есть подсказка?
Я попытался возиться с переменными или именами файлов, чтобы посмотреть, смогу ли я избежать переопределения
- изменить «основное» имя
- изменить пространство имен
- переименуйте имя переменной «app»
Спасибо