为什么我该使用WSGI?
我用mod_python已经有一段时间了,最近看到越来越多的文章在说WSGI有多好,但我其实并不太明白原因。
那么,我为什么要换成WSGI呢?它有什么好处?难不难学?值得花时间去学吗?
6 个回答
那我为什么要切换到它呢?有什么好处?
通常,如果你使用像NGINX或Apache这样的网络服务器,你需要启用一些模块(不过这两者的模块配置方式是不同的)。
WSGI是一个标准,详细信息在PEP 3333中,它基本上提供了一个标准接口,让用Python写的网络应用和网络服务器之间可以顺利沟通。
这意味着,WSGI让你的Python网络应用可以在很多不同的网络服务器上运行,而不需要在NGINX、Apache等上做额外的配置。
除此之外,WSGI服务器相比普通的网络服务器,能提供更多的功能和灵活性。比如Gunicorn就提供了很多特性,比如:
- 处理请求的工作线程数量
- 同时连接的最大客户端数量
- 最大待处理连接数
- 限制HTTP请求头字段的允许大小
- 一个工作线程在重启前能处理的最大请求数量
这里有关于Gunicorn支持的选项的完整文档。
这难吗?学习的过程值得吗?
作为软件开发者,你不需要了解这个标准的每一个细节,但作为系统管理员,你可能需要比单纯执行pip install gunicorn
多了解一些。
参考资料
如果你想用Python开发复杂的网页应用,可能会选择一些更全面的网页开发框架,比如DJango、Zope、Turbogears等。作为一个应用开发者,你不需要太担心WSGI。你只需要知道这些框架都支持WSGI。WSGI的作用是把网页服务器和网页应用的代码分开,这样系统管理员就可以更换网页服务器,只要网页应用符合WSGI的标准。如果你在这些框架中开发,基本上已经满足了这个条件。
不过,如果你是网页框架的开发者(比如在开发DJango或Zope本身),那么你就需要更深入地理解WSGI。
mod_wsgi和mod_python的比较:
- mod_wsgi稍微快一点(因为它内部使用了更多的C语言,少一些Python)
- mod_wsgi的处理过程可以和Apache隔离,这样可以提高安全性和稳定性,同时减少内存使用[1]
- mod_python可以让你访问Apache的一些内部功能
关于WSGI的一般情况:
- 有很多可以重复使用的中间件(比如身份验证、授权、会话管理、缓存、过滤等)
- 在非Apache的网络服务器上部署也很简单,可以通过原生的WSGI支持或者flup来实现
[1] - 这是和preforking模式的Apache相比,后者在每个进程中都维护一个单独的Python解释器