Веб-приложение на Django и фоновый процесс обработки данных, как сделать?
Добрый день!
Я разрабатываю фуллстак веб-приложение, использую Django.
В целом статично все хорошо отрабатывает, все запросы.
При запросе у меня приложение обращается по вебсокету к другому серверу и получает информацию с датчиков.
Так вот, мне нужно контролировать значения с датчиков, к примеру если значение с датчика температуры превысило пороговое, нужно отправить уведомление.
Варианты решения, которые я вижу:
1) Выполнять контроль в теле функции обработки запроса (будет работать только при запросах)
2) Создать отдельное приложение, которые будет проводить контроль, результаты выкидывать в БД, а уже Django приложение будет при выполнении запроса передавать на сайт информацию с БД
3) Вариант с celery (не работал с этим
4) В главном приложении django добавить разделение на потоки (первый поток обработка веб запросов), а другой поток это функция контроля параметров.
Подскажите, пожалуйста, кто сталкивался, кто как реализовывал.
Дополнительно:
А почему не просто Zabbix использовать для мониторинга и оповещения?
но вариант неплохой, спасибо
2) Создать отдельное приложение, которые будет проводить контроль, результаты выкидывать в БД, а уже Django приложение будет при выполнении запроса передавать на сайт информацию с БД
Можно при помощи отдельного приложения периодически опрашивать датчики и отправлять результаты в какую-нибудь внешнюю систему мониторинга или СУБД временных серий. На Джанго можно только показывать графики с TSDB / системы мониторинга. Роль оповещения могут взять на себя как Джанго, так и внешние средства.
Использовать Celery - по необходимости, если есть нужда в фоновой обработке задач.
Ответы:
2 или 3
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос
Для создания веб-приложения на Django с фоновым процессом обработки данных, вам потребуется использовать Celery - это асинхронная система обработки задач на языке Python. Вот шаги, которые вы можете выполнить, чтобы настроить ваше приложение:
1. Установите Celery и Redis (или другую подходящую систему сообщений) с помощью pip:
pip install celery redis
2. Создайте файл tasks.py в вашем Django-приложении и определите в нем задачи, которые вы хотите выполнить асинхронно. Например:
from celery import Celery app = Celery('tasks', broker='redis://localhost:6379/0') @app.task def process_data(data): # Обработка данных здесь return processed_data
3. Создайте файл celery.py в корневой папке вашего проекта Django и настройте Celery:
from __future__ import absolute_import, unicode_literals import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'my_project.settings') app = Celery('my_project') app.config_from_object('django.conf:settings', namespace='CELERY') app.autodiscover_tasks()
4. Добавьте в ваш settings.py следующие настройки для конфигурации Celery:
CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'
5. Запустите Celery вместе с вашим Django-приложением:
celery -A my_project worker --loglevel=info
Теперь у вас должно быть настроено веб-приложение на Django с фоновым процессом обработки данных с использованием Celery. Вы можете отправлять задачи на обработку в фоновый процесс, используя Celery, и получать результаты обратно в ваше приложение. Не забудьте настроить мониторинг и логирование для Celery, чтобы отслеживать выполнение задач.