2009-09-25 2 views
0

Может ли приложение Django быть перезагружено на каждый запрос?Django autoreload для разработки по каждому запросу?

Это очень полезно для разработки. Ruby on Rails делает как раз это.

  1. runserver перезагружается, но перезагружает медленно, и до сих пор иногда один должен остановить и запустить его снова на некоторые изменения, чтобы показать. (Например, изменения в администраторе.)
  2. mod_wsgi может загружать файлы на Linux при помощи * .wsgi-файлов. В Windows нужно использовать сценарий наблюдателя/перезагрузки, который снова работает медленно.
  3. Я не пробовал mod_python или fastcgi, они могут это сделать?

Причина этого в том, что при смене сценариев можно было бы сразу изменить изменений.

ответ

2

Конечно, он будет медленным для перезагрузки, он должен снова загрузить весь код приложения, а не только один файл. Django - это не PHP, поэтому не ожидайте, что он будет работать одинаково.

Если вы действительно хотите, чтобы Django перезагружался при каждом запросе независимо, используйте CGI и мост CGI/WSGI. Он все равно будет медленным, хотя сам CGI добавляет дополнительные накладные расходы.

Метод apache/mod_wsgi использования монитора кода, который работает в режиме демона при использовании UNIX или, если используется Windows, является наилучшим компромиссом. То есть, он проверяет один раз на секунду для любого файла кода, который является частью изменяемого приложения, и только затем перезапускает процесс. Сам сервер запуска также использует этот второй метод опроса из памяти.

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

В Apache/mod_wsgi 3.0 есть механизмы, позволяющие реализовать альтернативный перегружатель кода, который устраняет это окно, будучи в состоянии запланировать проверку модифицированного кода в начале запроса, но это будет влиять производительность каждого запроса. Для метода опроса он работает в фоновом режиме и, как правило, не вызывает какого-либо влияния производительности на запросы.

Даже в Apache/mod_wsgi с текущими версиями вы можете сделать то же самое, используя встроенный режим и установив Apache MaxRequestsPerChild в 1, но это также повлияет на производительность обслуживания статических файлов.

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

+1

'./manage.py runfcgi' также поддерживает аргумент maxrequests, который может быть установлен в 1 для принудительной перезагрузки. http://docs.djangoproject.com/en/dev/howto/deployment/fastcgi/ –

Смежные вопросы