Отправка .delay () и period_task для функций задач Celery в разные очереди - PullRequest
0 голосов
/ 28 октября 2018

У меня есть кодовая база с несколькими приложениями, каждое из которых имеет файл tasks.py, и у меня есть 100 таких функций

@periodic_task(run_every=crontab(minute='20'))
def sync_calendar_availability_and_prices(listing_id_list=None, reapply_rules_after_sync=False):

В старом формате определения периодических задач сельдерея, но отлично работает на сельдерее== 4.1.

Они выполняются каждые несколько часов или минут через такт, а также я называю их ad-hoc в кодовой базе с помощью .delay ().Я хочу, чтобы все вызовы .delay () входили в определенную очередь сельдерея manual_call_queue, а периодические тактовые вызовы для одной и той же функции переходили на periodic_beat_fired_queue - это простое изменение конфигурации в 1-2 строки где-то на глобальном уровнечтобы сделать это?

Я использую rabbitmq, сельдерей, django и django-celery-beat

1 Ответ

0 голосов
/ 28 октября 2018

Чтобы отправлять периодические задачи в определенную очередь, отправьте очередь / параметры аргумента.

@periodic_task(run_every=crontab(minute='20'), queue='manual_call_queue', options={'queue': 'periodic_beat_fired_queue'})
def sync_calendar_availability_and_prices(listing_id_list=None, reapply_rules_after_sync=False):

queue='manual_call_queue' используется, когда задача вызывается с помощью .delay или .apply_async

options={'queue': 'periodic_beat_fired_queue'} используется, когда ритм сельдерея вызывает задачу.

...