Вопрос

Доброе утро.

Как видно из названия, у меня есть несколько вопросов по поводу использования Python для веб-разработки.

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

Когда я в последний раз пробовал apache + mod_python + CherryPy, моей главной проблемой была необходимость перезагрузить веб-сервер, чтобы увидеть изменения.Это считается нормальным?По какой-то причине автоперезагрузка CherryPy вообще не работала.

  • Как лучше всего развернуть работающее приложение Python в рабочей среде и почему?Сейчас я использую Lighttpd для своих веб-приложений PHP, но как он будет работать с Python по сравнению, например, с nginx?

  • Стоит сразу нырять с фреймворком или накатить что-то простое свое?Я вижу, что у Django довольно много поклонников, но думаю, что это будет излишним для моих нужд, поэтому я начал изучать CherryPy.

  • Как именно обслуживаются приложения Python, если мне нужно перезагрузить httpd, чтобы увидеть изменения?Что-то вроде постоянного процесса, порождающего дочерние процессы, в котором все основные файлы происходят при запуске сервера, а затем просто ленивая загрузка необходимых ресурсов?

  • Python поддерживает многопоточность, нужно ли мне изучать возможность ее использования при разработке веб-приложений?В чем будет заключаться эта выгода и в каких ситуациях?

Большое спасибо!

Это было полезно?

Решение

Итак, вот мои мысли по этому поводу:

Я использую Питоновая паста за разработку моего приложения и, в конечном итоге, за его запуск (или любой другой веб-сервер Python).Обычно я не использую mod_python или mod_wsgi, поскольку это усложняет настройку разработки.

Я использую zc.buildout для управления моей средой разработки и всеми зависимостями вместе с виртуальное окружение.Это дает мне изолированную песочницу, которая не мешает работе каких-либо модулей Python, установленных в системе.

Для развертывания я также использую buildout/virtualenv, иногда с другим buildout.cfg.Я также использую Вставить развертывание и это механизм конфигурации, в котором у меня есть разные файлы конфигурации для разработки и развертывания.

Поскольку я обычно использую пасту/вишню и т. д.автономный. Я использую Apache, NGINX или, может быть, просто Varnish перед ним.Это зависит от того, какие параметры конфигурации вам нужны.Например.если нет виртуального хостинга, перепишите правила и т.д.необходимы, то мне не нужен полнофункциональный веб-сервер впереди.При использовании веб-сервера я обычно использую ProxyPass или более сложную перезапись с помощью mod_rewrite.

Веб-фреймворк Python, который я использую в данный момент, repoze.bfg прямо сейчас, кстати.

Что касается ваших вопросов о перезагрузке, я знаю об этих проблемах при запуске, например.mod_python, но при использовании автономного «пастера»...-перезагрузка» и т. д.до сих пор это работает очень хорошо.repoze.bfg дополнительно имеет некоторые настройки для автоматической перезагрузки шаблонов при их изменении.Если используемая вами структура имеет это, это должно быть задокументировано.

Что касается многопоточности, которая обычно используется внутри веб-сервера Python.Поскольку CherryPy поддерживает это, я думаю, вам не о чем беспокоиться, он должен использоваться автоматически.В конечном итоге вам следует просто провести несколько тестов, чтобы выяснить, при каком количестве потоков ваше приложение работает лучше всего.

Надеюсь, это поможет.

Другие советы

Какова наилучшая настройка среды разработки?

Не имеет большого значения.Мы используем Django, который прекрасно работает в Windows и Unix.Для производства мы используем Apache в Red Hat.

Является ли необходимость перезагрузки веб-сервера, чтобы увидеть изменения, нормой?

Да.Непонятно, почему вам нужно что-то другое.Программное обеспечение веб-приложений не должно быть динамичным.Содержание да.Программное обеспечение нет.

В Джанго мы развивать без использования какого-либо веб-сервера на нашем рабочем столе.Команда Django «runserver» в большинстве случаев перезагружает приложение.Для развития это отлично работает.Иногда оно не перезагружается, когда мы настолько сильно повредили что-то, что приложение не работает должным образом.

Как лучше всего развернуть работающее приложение Python в рабочей среде и почему?

«Лучший» в этом контексте не определен.Поэтому укажите некоторые уточнения для слова «гнездо» (например, «самый быстрый», «самый дешевый», «самый синий»).

Стоит сразу нырять с фреймворком или накатить что-то простое свое?

Не тратьте время на то, чтобы свернуть свой собственный.Мы используем Django из-за встроенной страницы администратора, которую нам не нужно писать или поддерживать.Экономит горы работы.

Как именно обслуживаются приложения Python, если мне нужно перезагрузить httpd, чтобы увидеть изменения?

Два метода:

  • Демон — mod_wsgi или mod_fastcgi имеют процесс демона Python, к которому они подключаются.Смените программное обеспечение.Перезапустите демон.

  • Встроенный — mod_wsgi или mod_python имеют встроенный режим, в котором интерпретатор Python находится внутри мода, внутри Apache.Вам необходимо перезапустить httpd, чтобы перезапустить встроенный интерпретатор.

Нужно ли мне изучать использование многопоточности?

Да и нет.Да, вам нужно об этом знать.Нет, вам не нужно делать многого.Apache, mod_wsgi и Django должны сделать это за вас.

+1 к ответу MrTopf, но добавлю еще несколько мнений.

Веб сервер

Apache — это веб-сервер, который предоставит вам максимум возможностей настройки.Избегайте mod_python, потому что он практически не поддерживается.С другой стороны, mod_wsgi очень хорошо поддерживается и обеспечивает лучшую стабильность (другими словами, его легче настроить для стабильного использования процессора/памяти, а не для резкого и непредсказуемого).

Еще одно огромное преимущество: вы можете настроить mod_wsgi для перезагрузки вашего приложения, если был затронут сценарий приложения wsgi, без необходимости перезапускать Apache.Для серверов разработки/тестирования вы даже можете настроить mod_wsgi для перезагрузки при изменении любого файла в вашем приложении.Это настолько полезно, что я даже запускал Apache+mod_wsgi на своем ноутбуке во время разработки.

Nginx и Lighttpd обычно используются для веб-серверов либо для обслуживания приложений Python напрямую через интерфейс fastCGI (пока не заморачивайтесь с какими-либо интерфейсами WSGI на этих серверах), либо используя их в качестве внешнего интерфейса перед Apache.Вызовы в приложение передаются (через прокси) в Apache+mod_wsgi, а затем nginx/lighttpd напрямую обслуживает статический контент.

У Nginx есть дополнительное преимущество: он может обслуживать контент непосредственно из memcached, если вы хотите добиться такой сложности.Я слышал пренебрежительные отзывы о Lighttpd, и, похоже, у него действительно есть некоторые проблемы с разработкой, но, безусловно, есть некоторые крупные компании, которые успешно его используют.

Стек Python

На самом низком уровне вы можете напрямую программировать WSGI для достижения наилучшей производительности.Существует множество полезных модулей WSGI, которые помогут вам в тех областях, которые вы не хотите развивать самостоятельно.На этом уровне вы, вероятно, захотите выбрать сторонние компоненты WSGI для выполнения таких задач, как разрешение URL-адресов и обработка HTTP-запросов/ответов.Отличным компонентом запроса/ответа является ВебОб.

Если вы посмотрите на Пилоны вы можете увидеть их идею «лучших в своем классе» компонентов WSGI и структуру, которая упрощает, чем Django, выбор собственных компонентов, таких как механизм шаблонов.

Возможно, Джанго — это излишество, но я не думаю, что это действительно хороший аргумент против.Django делает простые вещи проще.Когда вы начинаете разбираться с очень сложными приложениями, вам действительно нужно подумать о переходе на платформы более низкого уровня.

Посмотрите на Google App Engine.С их сайта:

Google App Engine позволяет запускать ваши веб -приложения в инфраструктуре Google.Приложения App Engine просты в создании, простые в обслуживании и простые в масштабировании по мере роста потребностей вашего трафика и хранения данных.С помощью App Engine нет серверов для обслуживания:Вы просто загружаете свое приложение, и оно готово обслуживать ваших пользователей.

Вы можете обслуживать свое приложение, используя бесплатное доменное имя в домене appspot.com или использовать приложения Google для обслуживания его из собственного домена.Вы можете поделиться своим приложением с миром или ограничить доступ к членам вашей организации.

App Engine ничего не стоит, чтобы начать.Подпишитесь на бесплатную учетную запись, и вы можете разработать и опубликовать свое заявление на мир, чтобы увидеть, бесплатно и без обязательств.Бесплатная учетная запись может использовать до 500 МБ постоянного хранилища и достаточно процессора и пропускной способности примерно за 5 миллионов просмотров страниц в месяц.

Лучшая часть из всех:Он включает поддержку Python, включая Django.Идти к http://code.google.com/appengine/docs/whatisgoogleappengine.html

Когда вы используете mod_python на многопоточном сервере Apache (по умолчанию в Windows) CherryPy работает в том же процессе, что и Apache.В этом случае вы почти наверняка не хочу, чтобы CP перезапустил процесс.

Решение:использовать mod_rewrite или mod_proxy так что CherryPy работает в своем собственном процессе.Затем вы можете автоматически перезагрузить сколько душе угодно.:)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top