Как стать автором
Обновить

Django: запуск при помощи xinetd

Время на прочтение2 мин
Количество просмотров5.5K
Итак, еще один способ запуска Django. Но зачем? Ведь уже каких только способов запуска нет. Казалось бы на любой вкус. Обоснование и описание — под катом.



Введение



Задумал я одну задумку. А именно, использовать веб приложения в качестве приложений на своем компьютере. Поскольку работаю с Python/Django, естественно и приложения писать используя именно их.

Что для этого нужно? Нужно запускать веб приложения с минимумом лишней работы. Все для этого вроде бы есть, Django может работать без сервера баз данных (используя SQLite), есть встроенный devserver, т.е. можно запускать веб приложения не устанавливая и настраивая вебсервер.

Но оказалось, что если с SQLite все отлично, то работать используя встроенный devserver не так уж и удобно. Его нужно запускать вручную, что согласитесь, лишние телодвижения. А хотелось бы, чтобы при переходе по ссылке все начинало работать автоматом.

Конечно можно запускать devserver при запуске системы, при помощи стартовых скриптов. Но это как-то некрасиво, кушает ресурсы и замедляет старт компа. А если будет много таких приложений?

Итак, что хочется? Чтобы веб приложение начинало работать при обращении по его адресу, а при отсутствии обращений лежало бы себе спокойненько на жестком диске.

Предлагаемое решение



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

  • Слушает сконфигурированные порты на локальном хосте.
  • При обращении по сконфигурированному заранее порту, стартует нужное приложение и передает принятый запрос на стандартный вход приложения.
  • Запущенное приложение передает ответ на свой стандартный выход, xinetd отдает ответ клиенту.


Все хорошо, только тут стандартный вход и выход, а Django общается с вебсервером по протоколу WSGI.

Скрипт



Итак, нужно написать скрипт, который будет с одной стороны общатся с xinetd через stdin/stdout, а с другой стороны, с моим приложением на Django, через WSGI.

Скрипт был написан и первая версия размещена на GitHub. Может кого-то он заинтересует, добро пожаловать.

Скачать скрипт можно на GitHub: django-xinetd

Установка и настройка описаны в README.

Заключение



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

Это первая версия и конечно весьма сырая. Но для простейших случаев пользоваться можно.

Чуть не забыл, в качестве платформы используется Linux (Ubuntu). xinetd устанавливается командой:

apt-get install xinetd


Скрипт написан и испытан с Django v1.4 Это важно, так как в предыдущих версиях отличается работа со статическими файлами. C более ранними версиями, не будут обслуживаться статические файлы.
Теги:
Хабы:
Всего голосов 18: ↑16 и ↓2+14
Комментарии6

Публикации

Истории

Работа

Data Scientist
81 вакансия
Python разработчик
133 вакансии

Ближайшие события

19 сентября
CDI Conf 2024
Москва
24 сентября
Конференция Fin.Bot 2024
МоскваОнлайн
30 сентября – 1 октября
Конференция фронтенд-разработчиков FrontendConf 2024
МоскваОнлайн