将Celery任务功能的.delay()和periodic_task发送到不同的队列

时间:2018-10-28 00:26:20

标签: django rabbitmq celery django-celery celerybeat

我有一个代码库,其中包含多个带有task.py的应用程序,并且总共有100个这些功能

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

它是celery定期任务定义的旧格式,但在celery == 4.1上可以正常工作。

这些通过节拍每隔几个小时或每分钟执行一次,我也通过使用.delay()在代码库中将它们称为即席执行。我希望所有.delay()调用都进入特定的celery队列manual_call_queue,并且周期性的节拍触发调用使同一功能进入periodic_beat_fired_queue -这是在某处容易进行的1-2行配置更改在全球范围内可以做到这一点?

我使用Rabbitmq,芹菜,django和django-celery-beat

1 个答案:

答案 0 :(得分:0)

要将定期任务发送到特定队列,请发送队列/选项arg。

@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'}在芹菜节拍调用任务时使用。