Веб-приложение на Django и фоновый процесс обработки данных, как сделать?

Ссылка скопирована
1 ответ

Добрый день!
Я разрабатываю фуллстак веб-приложение, использую Django.
В целом статично все хорошо отрабатывает, все запросы.

При запросе у меня приложение обращается по вебсокету к другому серверу и получает информацию с датчиков.

Так вот, мне нужно контролировать значения с датчиков, к примеру если значение с датчика температуры превысило пороговое, нужно отправить уведомление.

Варианты решения, которые я вижу:
1) Выполнять контроль в теле функции обработки запроса (будет работать только при запросах)
2) Создать отдельное приложение, которые будет проводить контроль, результаты выкидывать в БД, а уже Django приложение будет при выполнении запроса передавать на сайт информацию с БД
3) Вариант с celery (не работал с этим
4) В главном приложении django добавить разделение на потоки (первый поток обработка веб запросов), а другой поток это функция контроля параметров.

Подскажите, пожалуйста, кто сталкивался, кто как реализовывал.

Дополнительно:

А почему не просто Zabbix использовать для мониторинга и оповещения?

  • До этого с этим не работал, думаю, порог вхождения достаточно высок..
    но вариант неплохой, спасибо
  • https://pypi.org/project/django-apscheduler/
  • 2) Создать отдельное приложение, которые будет проводить контроль, результаты выкидывать в БД, а уже Django приложение будет при выполнении запроса передавать на сайт информацию с БД

    Можно при помощи отдельного приложения периодически опрашивать датчики и отправлять результаты в какую-нибудь внешнюю систему мониторинга или СУБД временных серий. На Джанго можно только показывать графики с TSDB / системы мониторинга. Роль оповещения могут взять на себя как Джанго, так и внешние средства.

    Использовать Celery - по необходимости, если есть нужда в фоновой обработке задач.

    Ответы:

    2 или 3

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Андрей PHP Ответ

    Для создания веб-приложения на Django с фоновым процессом обработки данных, вам потребуется использовать Celery - это асинхронная система обработки задач на языке Python. Вот шаги, которые вы можете выполнить, чтобы настроить ваше приложение:

    1. Установите Celery и Redis (или другую подходящую систему сообщений) с помощью pip:

    pip install celery redis

    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

    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()

    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'

    CELERY_BROKER_URL = 'redis://localhost:6379/0' CELERY_RESULT_BACKEND = 'redis://localhost:6379/0'

    5. Запустите Celery вместе с вашим Django-приложением:

    celery -A my_project worker --loglevel=info

    celery -A my_project worker --loglevel=info

    Теперь у вас должно быть настроено веб-приложение на Django с фоновым процессом обработки данных с использованием Celery. Вы можете отправлять задачи на обработку в фоновый процесс, используя Celery, и получать результаты обратно в ваше приложение. Не забудьте настроить мониторинг и логирование для Celery, чтобы отслеживать выполнение задач.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно