Выполнить код при первом запуске 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 на вашем веб-сервере.

  • pip install mysql == 1.2.3 под virtualenv (Разверните Django на Amazon Elastic Beanstalk)
  • Django 1.7.4: ошибка в Django 1.7 tutorial04: ошибка NoReverseMatch для реверса для 'голосования'
  • Не удается получить переменные среды в файле настроек Django
  • Цикл зависимостей приложений Django
  • шаблон шаблона django templatetags, метод вызова {{}} с контекстной переменной шаблона тега
  • Haystack говорит: «Модель не найдена для SearchResult»
  • django rest framework https для абсолютных URL-адресов?
  • Отклика клиента Django с единичным тестированием имеет пустой контекст
  • Python - лучший язык программирования в мире.