2016-12-22 17 views
0

У меня есть подключаемое приложение, которое я разрабатываю для системы 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 

Теперь я хочу, чтобы это периодически запускать которое может быть достигнуто с помощью сельдерея Бит настройки. Я также хочу, чтобы это было по своей очереди:

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 или есть лучший способ настроить мою задачу так, чтобы они работали в одной очереди?

+0

Можете ли вы дать настройки 'CELERY_ROUTES'? – Jinje

ответ