Отправка задач из сельдерея в разные очереди не работает - PullRequest
0 голосов
/ 20 апреля 2020

Мой вариант использования - добавить несколько очередей использования для разных задач. Чтобы все задачи upload_photos отправлялись в одну очередь, а upload_phone_number - в другую очередь, поскольку задача загрузки - сложная задача, я не хочу, чтобы затронул номер телефона для загрузки. с помощью upload_photos, хотя я использую разные очереди, задача upload_phone_number ожидает выполнения загрузки фотографий. Это правильный способ записи нескольких очередей

CELERY_QUEUES = (
    Queue('fast', Exchange('fast'), routing_key='fast'),
    Queue('default', Exchange('default'), routing_key='default')
)
CELERY_ROUTES = {
    'upload_phone_number': {
        'exchange': 'fast'`
        'exchange_type': 'direct',
        'routing_key': 'fast'
    },
    'upload_photos': {
        'exchange': 'default',
        'exchange_type': 'direct',
        'routing_key': 'default'
    },
}




Это моя задача сельдерея

@app.task(name="upload_phone_number")
def upload_photos():

@app.task(name="upload_phone_number")
def upload_phone():

1 Ответ

0 голосов
/ 20 апреля 2020

Celery с версии 4.0 поддерживает приоритеты через (RabbitMQ или Redis transport)

from kombu import Exchange, Queue

app.conf.task_queues = [
    Queue('tasks', Exchange('tasks'), routing_key='tasks',
          queue_arguments={'x-max-priority': 10}),
    Queue('different_tasks', Exchange('different_tasks'), routing_key='different_tasks',
          queue_arguments={'x-max-priority': 5}),
]

Относительно вашего решения:

Приведите пример не работает в том, что вы должны порождать как минимум 2 рабочих, у одного из которых есть только быстрый Que

celery worker -A myproject -Q fast
celery worker -A myproject -Q fast,slow
...