2015-02-18 3 views
0

Я готов отправить задачи с веб-сервера (работающего Django) на удаленную машину с сервером Rabbitmq и некоторыми рабочими, которые я реализовал с помощью Celery.Функции задач сельдерея - веб-сервер и удаленный сервер

Если я следую по пути Сельдерей, мне кажется, что мне нужно разделить код между обеими машинами, что означает репликацию рабочего логического кода в коде веб-приложения.

Итак:

  • Есть ли лучшая практика, чтобы сделать это? Поскольку код избыточен, я думаю об использовании подмодуля git (=> реплицированного в репозитории кода веб-приложения и в репозитории кода рабочего)
  • Должен ли я лучше использовать что-то еще, чем Celery?
  • Я что-то пропустил?

ответ

2

Один из способов управления этим - хранить своих работников в проекте django. Django и сельдерей прекрасно сочетаются друг с другом, позволяя использовать части вашего проекта django в приложении для сельдерея. http://celery.readthedocs.org/en/latest/django/first-steps-with-django.html

Развертывание этого будет означать, что ваше веб-приложение не будет использовать модули, связанные с вашими работниками сельдерея, а на вашей машине из сельдерея ваши взгляды на джанго не будут использоваться. Это обычно приводит только к нескольким мегабайтам неиспользуемого кода приложения django ...

1

Вы можете использовать send_task. Он принимает те же параметры, что и apply_async, но вы должны указать имя задачи. Без загрузки модуля в Джанго вы можете отправить задачи:

app.send_task('tasks.add', args=[2, 2], kwargs={}) 

http://celery.readthedocs.org/en/latest/reference/celery.html#celery.Celery.send_task

+0

Действительно, это то, что я искал. Тем не менее, было бы неплохо описать хорошую практику о том, как делиться именами задач (пунктирные пути к функциям задач) – lajarre

+0

да по умолчанию имя задачи - это полный путь модуля python: «myproject.jobs.my_task». Вы можете переименовать его с помощью декоратора, но я предпочитаю по умолчанию. – ant31