Python веб-программирование - PullRequest
       62

Python веб-программирование

12 голосов
/ 24 февраля 2009

Доброе утро.

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

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

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

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

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

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

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

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

Ответы [ 5 ]

8 голосов
/ 24 февраля 2009

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

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

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

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

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

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

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

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

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

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

Два метода:

  • Daemon - у mod_wsgi или mod_fastcgi есть процесс демона Python, к которому они подключаются. Измените свое программное обеспечение. Перезапустите демон.

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

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

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

6 голосов
/ 24 февраля 2009

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

Вебсервер

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

Еще одно огромное преимущество: вы можете настроить 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. Отличным компонентом запроса / ответа является WebOb .

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

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

6 голосов
/ 24 февраля 2009

Итак, вот мои мысли об этом:

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

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

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

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

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

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

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

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

2 голосов
/ 24 февраля 2009

Посмотрите на 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

1 голос
/ 24 февраля 2009

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

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

...