Я только начинаю использовать django-celery, и я хотел бы установить, что celeryd работает как демон. Тем не менее, instructions предполагает, что он может быть настроен только для одного сайта/проекта за раз. Может ли celeryd обрабатывать более одного проекта, или он может обрабатывать только один? И, если это так, есть ли чистый способ настроить celeryd для автоматического запуска для каждой конфигурации, что требует от меня создания отдельного сценария инициализации для каждого из них?Использование celeryd в качестве демона с несколькими приложениями django?
ответ
Как и все интересные вопросы, ответ это зависит. :)
Это, безусловно, возможно придумать сценарий, в котором celeryd может использоваться двумя независимыми сайтами. Если несколько сайтов отправляют задачи на один и тот же обмен, а задачи не требуют доступа к какой-либо конкретной базе данных - скажем, они работают с адресами электронной почты или номерами кредитных карт или чем-то иным, кроме записи в базе данных, - тогда один сельдерей может быть достаточным. Просто убедитесь, что код задачи находится в общем модуле, который загружается всеми сайтами и сервером сельдерея.
Как правило, вы обнаружите, что сельдерей нуждается в доступе к базе данных - либо он загружает объекты на основе идентификатора, который был передан в качестве параметра задачи, либо он должен написать некоторые изменения в базе данных, или, чаще всего, оба. И несколько сайтов/проектов обычно не используют базу данных, даже если они используют одни и те же приложения, поэтому вам необходимо оставить очереди задач отдельными.
В этом случае, как правило, происходит то, что вы создали один брокер сообщений (например, RabbitMQ) с несколькими биржами. Каждый обмен получает сообщения с одного сайта. Затем вы запускаете один или несколько процессов celeryd где-то для каждого обмена (в настройках конфигурации celery вам нужно указать обмен. Я не верю, что celeryd может слушать несколько обменов). Каждый сервер celeryd знает свой обмен, приложения, которые он должен загрузить, и базу данных, к которой он должен подключиться.
Чтобы управлять ими, я бы предложил посмотреть на cyme. Это by @asksol, и управляет несколькими экземплярами celeryd, на нескольких серверах, если необходимо. Я не пробовал, но похоже, что он должен обрабатывать разные конфигурации для разных экземпляров.
Не пробовал, но с использованием сельдереем 3.1.x, который не нуждается в Джанго-сельдерее, согласно документации вы можете создать экземпляр сельдерого приложения вроде этого:
app1 = Celery('app1')
app1.config_from_object('django.conf:settings')
app1.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
Но вы можете использовать сельдерей мульти для запуска несколько работники с одной конфигурацией каждый, вы можете увидеть примеры here. Таким образом, вы можете запустить несколько рабочих с различными --app appX параметров, так что будет использовать разные Такса и настройки:
# 3 workers: Two with 3 processes, and one with 10 processes.
$ celery multi start 3 -c 3 -c:1 10
celery worker -n [email protected] -c 10 --config celery1.py --app app1
celery worker -n [email protected] -c 3 --config celery2.py --app app2
celery worker -n [email protected] -c 3 --config celery3.py --app app3
- 1. Использование R.NET с несколькими приложениями
- 2. Многоквартирный дом с несколькими приложениями в django
- 3. Django и компас с несколькими приложениями
- 4. Django проект с несколькими приложениями на Heroku
- 5. Проблема Django Celeryd (python manage.py celeryd)
- 6. Использование SimpleMembership с несколькими приложениями и OAuthWebSecurity
- 7. Проект упаковки Django с несколькими приложениями
- 8. Django Autocomplete-light с несколькими приложениями
- 9. Как работать с сельдереем в качестве демона в ubuntu?
- 10. Django logging ломает демона сельдерея
- 11. Проблемы с запуском celerybeat в качестве демона с django
- 12. TransactionManagementError с Django Celeryd/django-celery с sqlite backend
- 13. Использование пользовательского AccountAuthenticator с несколькими приложениями
- 14. Использование pushwoosh с несколькими целевыми приложениями
- 15. django celeryd and celery beat
- 16. ELMAH с несколькими приложениями
- 17. Как организовать базу данных в Django с несколькими отдельными приложениями?
- 18. Google App Engine + Django с несколькими приложениями в проекте = ImportError
- 19. повторное использование углового кода между несколькими приложениями
- 20. Запуск сельдерея в качестве демона не создает файл PID
- 21. Использование bc в качестве демона в оболочке BASH из awk
- 22. сельдерей с несколькими экземплярами django
- 23. Проект Django, обслуживающий статические файлы с несколькими приложениями
- 24. Сельдерей в режиме демона
- 25. Symfony2 работает с несколькими приложениями
- 26. Eunit ошибка с несколькими приложениями
- 27. Один проект с несколькими приложениями?
- 28. nginx с несколькими приложениями symfony2
- 29. Координация/управление несколькими приложениями С
- 30. Capistrano с несколькими приложениями Puma