使用 mod_python 有一段时间了,我阅读了越来越多关于 WSGI 有多好的文章,但并没有真正理解为什么。
那么我为什么要切换到它呢?有什么好处?这很难吗,学习曲线值得吗?
为了用 Python 开发复杂的 Web 应用程序,您可能会使用更全面的 Web 开发框架,例如 DJango、Zope、Turbogears 等。作为应用程序开发人员,您不必过多担心 WSGI。您需要注意的是这些框架支持 WSGI。WSGI 允许分离 Web 服务器和 Web 应用程序代码,只要 Web 应用程序符合 WSGI,系统管理员就可以更改 Web 服务器。如果您在其中一个框架中进行开发,那么您无论如何都会满足这个条件。
如果您是 Web 框架开发人员(即开发 DJango 或 Zope 本身),那么您必须更深入地了解 WSGI。
mod_wsgi 与 mod_python:
WSGI 一般:
[1] - 与 preforking Apache 相比,后者在每个进程中维护一个单独的 Python 解释器
通常,如果您有 NGINX 或 Apache 之类的 Web 服务器,则必须启用模块(尽管两种情况下的模块配置不同)。
WSGI 是 PEP 3333 中描述的标准,基本上,它提供了用 Python 编写的 Web 应用程序和 Web 服务器之间的标准接口。
这意味着,WSGI 为您的 Python Web 应用程序提供了跨许多不同 Web 服务器的可移植性,而无需在 NGINX、Apache 等上进行任何额外配置。
除此之外,与 Web 服务器相比,WSGI 服务器可以为您提供很多功能,并且具有更大的灵活性。Gunicorn提供了许多功能,例如:
这是有关 Gunicorn 支持的选项的完整文档。
作为软件开发人员,您不需要了解有关标准的每个细节,但作为系统管理员,您可能需要了解更多,而不仅仅是做pip install gunicorn
等等。
大多数 Python 框架都实现了 wsgi。有用于 apache 的 mod_wsgi 和用于其他模块的 SCGI/FastCGI/AJP 模块 + Flup。这样,您就可以拥有单独的 Python 进程的所有优势,而无需绑定到一个 Web 服务器。
您不必重新学习太多,因为从开发人员的角度来看,区别只是一个小的包装器和一些服务器配置。
从部署的角度来看,不同之处在于您的 Python 代码位于与 Web 浏览器不同的进程中,这意味着
a) python 进程可以作为 Web 服务器以外的另一个用户运行。如果使用得当,这对安全性很有价值。
b) Web 服务器进程不需要包含 python 运行时。如果服务器运行大量“其他”请求(静态文件等)和一些繁重的 python 请求,这可能会大大提高性能。
WSGI是标准的API,可以让你选择webserver,前面还放了Repoze之类的WSGI管道。