Django Celery как иметь более одного приложения CELERY - PullRequest
0 голосов
/ 28 мая 2019

Использование 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»

Спасибо

...