Выполнить код при первом запуске Django

У меня есть приложение Django, написанное для обработки отображения веб-страницы с данными из модели на основе первичного ключа, переданного в URL-адресе, все это прекрасно работает, а компонент Django работает отлично по большей части.

Мой вопрос, хотя есть, и я пробовал несколько методов, таких как использование AppConfig, заключается в том, как я могу это сделать, когда сервер Django загружается, вызывается код, который затем создает отдельный поток, который затем будет отслеживать внешний источник, регистрируя действительные данные из этого источника в качестве модели в базу данных.

У меня есть код потока, написанный вместе с разделом, который создает модель и сохраняет ее в базе данных. Моя проблема заключается в том, что если я попытаюсь использовать AppConfig для создания потока, который будет обрабатывать код, я получаю django.core .exceptions.AppRegistryNotReady: Приложения еще не загружены. ошибка, и сервер не загружается.

Где было бы целесообразно разместить код? Является ли мой подход неправильным в этом вопросе?

One Solution collect form web for “Выполнить код при первом запуске Django”

Пытаться использовать потоки, чтобы обойти блокирующие процессы, такие как веб-сервер, – это упражнение от боли. Я делал это раньше, и он хрупкий и часто дает непредсказуемые результаты.

Гораздо проще создать отдельный рабочий, который запускается в совершенно другом процессе, который вы запускаете отдельно. Он будет иметь тот же доступ к базе данных и может даже использовать ваши модели Django. Это то, как хосты, подобные Heroku, подходят к этой проблеме. Он поставляется с дополнительным преимуществом: он может быть протестирован отдельно и вообще не нужно запускать, пока вы работаете над своим основным приложением Django.

В наши дни с множеством вариантов виртуализации, таких как Vagrant и варианты контейнеризации, такие как Docker, запущенные параллельные процессы и рабочие тривиальны. В дикой природе они могут буквально запускаться на отдельных серверах с вашей базой данных на другом сервере. Как отмечалось в комментариях, запуск рабочего процесса может быть легко делегирован отдельной команде управления Django . Это, в свою очередь, можно довольно легко превратить в отдельные рабочие процессы с помощью gunicorn на вашем веб-сервере.

Interesting Posts

Отсутствие модулей Matplotlib с подчеркиванием

Развертывание статических ресурсов на герою с локальной машины – невозможно открыть файл «manage.py»: Нет такого файла или каталога

Django – Получить модель ContentType по названию модели (общие отношения)

Есть ли рубиновый эквивалент «python -i»?

Ошибка создания файла базы данных LMDB в Python для Caffe

Могу ли я переопределить виртуальную функцию C ++ в Python с Cython?

Как написать хороший / правильный пакет __init__.py

Найти индексы строк нескольких значений в массиве numpy

Selenium WebDriver: запускается Firefox, но не открывается URL-адрес

Перекрестная группа (XG) Транзакции и дальнейшее объяснение использования

Можно ли подключить более надежный парсер HTML к механике Python?

Crontab не запускает скрипт python

Как построить график в моем графическом интерфейсе

вызов init для нескольких родительских классов с супер?

Очистка созданного пользователем уценки с кодом в ней

Python - лучший язык программирования в мире.