Почему я должен использовать WSGI?

Некоторое время с помощью mod_python я читал все больше статей о том, насколько хорош WSGI, не понимая почему.

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

Ответы

Ответ 1

mod_wsgi vs. mod_python:

  • mod_wsgi немного быстрее (внутри там больше C, меньше Python) Процессы
  • mod_wsgi могут быть изолированы от Apache, что улучшает безопасность/стабильность при использовании более низкой памяти [1]
  • mod_python предоставляет вам доступ к некоторым внутренним компонентам Apache

WSGI в целом:

  • много многоразового промежуточного ПО (аутентификация/авторизация, сеанс, кеширование, фильтрация)
  • простота развертывания на веб-серверах, не относящихся к Apache, либо через встроенную поддержку WSGI, либо в режиме "плагин"

[1] - по сравнению с предпродачей Apache, которая поддерживает отдельный интерпретатор Python в каждом процессе

Ответ 2

Для разработки сложных веб-приложений на Python вы, вероятно, будете использовать более полную инфраструктуру веб-разработки, такую ​​как DJango, Zope, Turbogears и т.д. Как разработчик приложений, вам не нужно беспокоиться о WSGI. Все, что вам нужно знать, это то, что эти фреймворки поддерживают WSGI. WSGI позволяет разделить код веб-сервера и веб-приложения, и системный администратор может изменить веб-сервер, если веб-приложение совместимо с WSGI. Если вы развиваетесь в одной из этих фреймворков, вы все равно будете удовлетворять этому условию.

Если вы разработчик веб-фреймворка (который разрабатывает сам DJango или Zope), вам нужно понять WSGI более подробно.

Ответ 3

В большинстве инфраструктур Python реализовано wsgi. Существует mod_wsgi для apache и модуль SCGI/FastCGI/AJP + Flup для других. Таким образом, вы можете использовать все преимущества отдельного процесса Python, не привязавшись к одному веб-серверу.

Ответ 4

Вам не нужно много переучивать, так как разница с перспективой разработчика - это всего лишь небольшая оболочка и некоторая конфигурация сервера.

С точки зрения развертывания разница заключается в том, что ваш код python живет в отдельном процессе из веб-браузера, что означает

a) Процесс python может работать как другой пользователь, чем веб-сервер. Это может быть ценным для обеспечения безопасности при правильном использовании.

b) Процессы веб-сервера не должны содержать время выполнения python. Это может стать большим стимулом для производительности, если на сервере запущено множество "других" запросов (статических файлов и т.д.) И некоторых тяжелых запросов на питон.

Ответ 5

WSGI - это стандартный API, который позволяет вам выбрать веб-сервер, а также поставить перед ним WSGI-конвейер, такой как Repoze.

См. http://repoze.org/

Ответ 6

Так почему я должен переключиться на него? Каковы преимущества?

Обычно, если у вас есть веб-сервер, например NGINX или Apache, вам необходимо включить модули (хотя конфигурация модулей в обоих случаях различна).

WSGI - это стандарт, описанный на PEP 3333, и в основном обеспечивает стандартный интерфейс между веб-приложениями, написанными на Python и Webservers.

Это означает, что WSGI обеспечивает переносимость вашего веб-приложения Python на многих разных веб-серверах без каких-либо дополнительных конфигураций на вашем NGINX, Apache и т.д.

Кроме того, сервер WSGI может предоставить вам множество функций с большей гибкостью по сравнению с веб-сервером. Gunicorn, предоставляет множество функций, таких как:

  • Число рабочих потоков для обработки запросов
  • Максимальное количество одновременных клиентов.
  • Максимальное количество ожидающих соединений.
  • Ограничить допустимый размер поля заголовка HTTP-запроса.
  • Максимальное количество запросов, которые рабочий обрабатывает перед перезагрузкой.

Здесь - полный документ о вариантах, поддерживаемых Gunicorn.


Является ли это трудным, и стоит ли ему кривая обучения?

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

Ссылки