2016-03-03 2 views
1

Я настроил Django + сельдерей: все работает, я могу выполнять задачи, которые вызываются из views.py т.е. mul.apply_async((2, 5), queue='celery', countdown=5)Джанго + Сельдерей: как задачи цепи с параметрами для периодической задачи

Мне нужна ГРАФИКИ периодической задачи, свяжет простые задачи с аргументом, который передается от пользователей. Я прочитал документы http://docs.celeryproject.org/en/latest/userguide/canvas.html и знаю, как цепочки, я знаю, как делать периодическую задачу без параметров @periodic_task(run_every=(crontab(hour="*", minute="*", day_of_week="*")))

Но как это можно комбинировать?

Что я хочу рабочий процесс:

  1. Пользователь создает проект с параметрами. Выполнено 5 заданий с использованием этих параметров.
  2. Затем мне нужно расписание повторять все 5 заданий каждые 24 часа. Поэтому здесь я не знаю, как передавать параметры (они сохраняются в db).

В другой ответ я видел этот синтаксис:

CELERYBEAT_SCHEDULE = { 
# crontab(hour=0, minute=0, day_of_week='saturday') 
'schedule-name': { # example: 'file-backup' 
    'task': 'some_django_app.tasks....', # example: 'files.tasks.cleanup' 
    'schedule': crontab(...) 
    'args': (2, 3) 
}, 

}

Но проблема в том, что он находится в settings.py Джанго, но не в tasks.py и я не могу динамически передать args.

ответ

1

Задача celerybeat, которую вы регистрируете, может быть оболочкой и выполнять внутри нее логику проекта/задачи, при необходимости отстреливая другие задачи. Вы можете выполнить задачи проекта внутри своей работы по измельчению сельдерея.

  • CELERYBEAT_SCHEDULE.task ->'some_django_app.project_beat_task'

Затем проект биений задача может получить правильные проекты и все задачи, связанные с ними, возможно, порождая цепочку задач для каждого проекта

Смежные вопросы