Я пытаюсь сохранить несколько очередей сельдерея с разными задачами и работниками в одной и той же базе данных redis. На самом деле просто проблема удобства только для того, чтобы один redis-сервер, а не два на моей машине.Как сохранить несколько независимых очередей сельдерея?
Я следил за учебниками по сельдеристу дословно, так как это единственный способ заставить его работать на меня. Теперь, когда я пытаюсь дублировать все с слегка измененными именами/очередями, он продолжает выходить из строя.
Примечание. Я новичок в Python и Celery, что, очевидно, является частью проблемы. Я не уверен, какие части называются «задача/задачи» как имя или специальные слова.
Моя сокращенная версия документации: Запуск celery -A tasks worker
для создания рабочих. tasks.py содержит код задачи с celery = Celery('tasks', broker='redis://localhost')
для подключения к сельдерею и @task()
над моими функциями, которые я хочу отложить.
В моей программе для очередей задач ...
from tasks import do_work
do_work.delay()
Поэтому, учитывая все вышесказанное, какие шаги мне нужно предпринять, чтобы превратить это в два типа задач, которые работают независимо друг от друга на отдельные очереди и рабочие? Например, blue_tasks и red_tasks?
Я попытался изменить все экземпляры задач на blue_tasks или red_tasks. Однако, когда я ставил очередь blue_tasks, работники red_tasks, с которых я начал, начинают пытаться работать с ними.
Я читал об очередях по умолчанию и таких, так что я попробовал этот код, который не работал:
CELERY_DEFAULT_QUEUE = 'red'
CELERY_QUEUES = (
Queue('red', Exchange('red'), routing_key='red'),
)
Как примечание стороны, я не понимаю, почему celery worker
ошибки вне с сельдереем пытается подключиться к экземпляру amqp по умолчанию, в то время как celery -A tasks worker
сообщает, что сельдерей подключается к Redis. Какой код задачи celery worker
пытается запустить на рабочем месте, если ничего не указано?
Я не мог проверить это, но это звучит разумно. Я закончил рефакторинг моего кода, чтобы две разные задачи были обобщены в одну функцию, поэтому я мог хранить все в одной очереди. Оказалось, что это хорошее решение с точки зрения управления кодами. – jwoww
Не забудьте передать queue = "red" в apply_sync, несмотря на это значение CELERY_ROUTES, задача будет отправлена в очередь по умолчанию «сельдерей». Когда вы используете CELERY_ROUTES, я думаю, что неплохо также указать значение CELERY_DEFAULT_QUEUE = 'celery' по умолчанию (и, возможно, изменить его вместо передачи информации о очереди в apply_async). –
@ DominiquePERETTI Я никогда не видел этого поведения, если вы не ссылаетесь на имя задачи правильно в своих 'CELERY_ROUTES'. – woot