Некоторое время с помощью mod_python я читал все больше статей о том, насколько хорош WSGI, не понимая почему.
Так почему я должен переключиться на него? Каковы преимущества? Трудно ли это, и стоит ли ему кривая обучения?
Некоторое время с помощью mod_python я читал все больше статей о том, насколько хорош WSGI, не понимая почему.
Так почему я должен переключиться на него? Каковы преимущества? Трудно ли это, и стоит ли ему кривая обучения?
mod_wsgi vs. mod_python:
WSGI в целом:
[1] - по сравнению с предпродачей Apache, которая поддерживает отдельный интерпретатор Python в каждом процессе
Для разработки сложных веб-приложений на Python вы, вероятно, будете использовать более полную инфраструктуру веб-разработки, такую как DJango, Zope, Turbogears и т.д. Как разработчик приложений, вам не нужно беспокоиться о WSGI. Все, что вам нужно знать, это то, что эти фреймворки поддерживают WSGI. WSGI позволяет разделить код веб-сервера и веб-приложения, и системный администратор может изменить веб-сервер, если веб-приложение совместимо с WSGI. Если вы развиваетесь в одной из этих фреймворков, вы все равно будете удовлетворять этому условию.
Если вы разработчик веб-фреймворка (который разрабатывает сам DJango или Zope), вам нужно понять WSGI более подробно.
В большинстве инфраструктур Python реализовано wsgi. Существует mod_wsgi для apache и модуль SCGI/FastCGI/AJP + Flup для других. Таким образом, вы можете использовать все преимущества отдельного процесса Python, не привязавшись к одному веб-серверу.
Вам не нужно много переучивать, так как разница с перспективой разработчика - это всего лишь небольшая оболочка и некоторая конфигурация сервера.
С точки зрения развертывания разница заключается в том, что ваш код python живет в отдельном процессе из веб-браузера, что означает
a) Процесс python может работать как другой пользователь, чем веб-сервер. Это может быть ценным для обеспечения безопасности при правильном использовании.
b) Процессы веб-сервера не должны содержать время выполнения python. Это может стать большим стимулом для производительности, если на сервере запущено множество "других" запросов (статических файлов и т.д.) И некоторых тяжелых запросов на питон.
WSGI - это стандартный API, который позволяет вам выбрать веб-сервер, а также поставить перед ним WSGI-конвейер, такой как Repoze.
Обычно, если у вас есть веб-сервер, например NGINX или Apache, вам необходимо включить модули (хотя конфигурация модулей в обоих случаях различна).
WSGI - это стандарт, описанный на PEP 3333, и в основном обеспечивает стандартный интерфейс между веб-приложениями, написанными на Python и Webservers.
Это означает, что WSGI обеспечивает переносимость вашего веб-приложения Python на многих разных веб-серверах без каких-либо дополнительных конфигураций на вашем NGINX, Apache и т.д.
Кроме того, сервер WSGI может предоставить вам множество функций с большей гибкостью по сравнению с веб-сервером. Gunicorn, предоставляет множество функций, таких как:
Здесь - полный документ о вариантах, поддерживаемых Gunicorn.
В качестве системного администратора вам не нужно понимать каждую деталь о стандарте, но, как разработчик программного обеспечения, вам может понадобиться понять немного больше, чем просто делать pip install gunicorn
и т.д.