我有一个可插拔的应用程序,我正在为Django系统开发。在其中,我有一个创建类似通知的任务:
installable_app.tasks
@app.task(name='tasks.generate_notifications')
def generate_notifications(...):
我有一个可插拔的应用程序,我正在为Django系统开发。在其中,我有一个创建类似通知的任务:
installable_app.tasks
@app.task(name='tasks.generate_notifications')
def generate_notifications(...):
clients = get_list_of_clients()
for client in clients:
client_generate_notification.delay(client['name'], client['id'])
return "Notification Generation Complete"
@app.task
def client_generate_notification(client_name, client_id):
...
return result
现在我想要定期运行,这可以通过Celery Beat使用设置来完成。我也希望它在自己的队列中:
settings.py:
CELERYBEAT_SCHEDULE ={
{'generate_schedule_notifications': {
'task': 'tasks.generate_notifications',
'schedule': crontab(hour=6, minute=0),
'options': {'queue': 'notification_gen'},
'args': ('schedule', 'Equipment', 'HVAC')},
}
}
第一个任务generate_notifications
在队列notification_gen
上正确运行,但client_generate_notification
子任务在默认队列上运行。
我知道我可以在@task装饰器中专门指定队列,但由于这是一个django应用程序,我宁愿指定它们实际运行的位置。
我已经研究过使用CELERY_ROUTES
选项但是当我尝试它时,它似乎覆盖了我正在运行的其他任务的队列。
最佳做法是在CELERY_ROUTES
中定义所有可能的队列,还是有更好的方法来设置我的任务,以便它们都在同一个队列上运行?