Django / Celery несколько очередей, не занимая ни одной задачи - PullRequest
0 голосов
/ 17 сентября 2018

Я новичок в сельдерее и джанго В моей настройке сельдерея, когда я вызываю задачи без каких-либо очередей, он отлично работает с несколькими работниками. Но когда я указываю очереди, рабочие ничего не потребляют

У меня есть проект под названием пример здесь структура

├── example
│   ├── celery.py
│   ├── __init__.py
│   ├── settings.py
│   ├── urls.py
│   └── wsgi.py
├── mailer
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   ├── __init__.py
│   │   └── __pycache__
│   │       └── __init__.cpython-36.pyc
│   ├── models.py
│   ├── tasks.py
│   ├── tests.py
│   └── views.py
└── manage.py

В settings.py (Настройка очереди)

# ==============================
# CELERY SETTINGS
# ==============================
CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672'
CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'Asia/Kolkata'
CELERY_ROUTES = {
    'example.mailer.tasks.first_task': {'queue': 'first_queue'},
    'example.mailer.tasks.second_task': {'queue': 'second_queue'},
}

И мой почтовик / tasks.py

@shared_task
def first_task():
    for i in tqdm(range(100000000)):
        pass
    return "First task finished"


@shared_task
def second_task():
    for i in range(100000000):
        print(i,'Second Task')
    return "Second task finished"

с этим, когда я запускаю таких работников, как

celery -A example worker -l info -c 4 -n worker1
celery -A example worker -l info -c 2 -n worker2

Работает отлично, но когда я пытаюсь

celery -A example worker -l info -c 2 -n worker1 -Q first_queue
celery -A example worker -l info -c 2 -n worker2 -Q second_queue

Это не работает. Вот несколько снимков экрана

рабочий first_queue работает
Работает second_queue
Что происходит, когда я звоню им
Но задачи не выполняются

Надеюсь, кто-нибудь сможет мне помочь. Заранее спасибо

1 Ответ

0 голосов
/ 17 сентября 2018

На основании структуры каталогов, которую вы показали, mailer является собственным приложением и должно быть объявлено без example в начале, например,

CELERY_ROUTES = {
    'mailer.tasks.first_task': {'queue': 'first_queue'},
    'mailer.tasks.second_task': {'queue': 'second_queue'},
}
...