Почему я должен использовать WSGI? - PullRequest
17 голосов
/ 28 ноября 2009

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

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

Ответы [ 6 ]

10 голосов
/ 28 ноября 2009

mod_wsgi против mod_python:

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

WSGI в целом:

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

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

9 голосов
/ 28 ноября 2009

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

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

2 голосов
/ 28 ноября 2009

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

1 голос
/ 24 мая 2017

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

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

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

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

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

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

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


Сложно ли, и стоит ли это обучение?

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

Ссылки

1 голос
/ 28 ноября 2009

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

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

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

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

0 голосов
/ 28 ноября 2009

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

См. http://repoze.org/

...