为什么我该使用WSGI?

24 投票
6 回答
13581 浏览
提问于 2025-04-15 16:29

我用mod_python已经有一段时间了,最近看到越来越多的文章在说WSGI有多好,但我其实并不太明白原因。

那么,我为什么要换成WSGI呢?它有什么好处?难不难学?值得花时间去学吗?

6 个回答

6

那我为什么要切换到它呢?有什么好处?

通常,如果你使用像NGINX或Apache这样的网络服务器,你需要启用一些模块(不过这两者的模块配置方式是不同的)。

WSGI是一个标准,详细信息在PEP 3333中,它基本上提供了一个标准接口,让用Python写的网络应用和网络服务器之间可以顺利沟通。

这意味着,WSGI让你的Python网络应用可以在很多不同的网络服务器上运行,而不需要在NGINX、Apache等上做额外的配置。

除此之外,WSGI服务器相比普通的网络服务器,能提供更多的功能和灵活性。比如Gunicorn就提供了很多特性,比如:

  • 处理请求的工作线程数量
  • 同时连接的最大客户端数量
  • 最大待处理连接数
  • 限制HTTP请求头字段的允许大小
  • 一个工作线程在重启前能处理的最大请求数量

这里有关于Gunicorn支持的选项的完整文档。


这难吗?学习的过程值得吗?

作为软件开发者,你不需要了解这个标准的每一个细节,但作为系统管理员,你可能需要比单纯执行pip install gunicorn多了解一些。

参考资料

16

如果你想用Python开发复杂的网页应用,可能会选择一些更全面的网页开发框架,比如DJango、Zope、Turbogears等。作为一个应用开发者,你不需要太担心WSGI。你只需要知道这些框架都支持WSGI。WSGI的作用是把网页服务器和网页应用的代码分开,这样系统管理员就可以更换网页服务器,只要网页应用符合WSGI的标准。如果你在这些框架中开发,基本上已经满足了这个条件。

不过,如果你是网页框架的开发者(比如在开发DJango或Zope本身),那么你就需要更深入地理解WSGI。

13

mod_wsgi和mod_python的比较:

  • mod_wsgi稍微快一点(因为它内部使用了更多的C语言,少一些Python)
  • mod_wsgi的处理过程可以和Apache隔离,这样可以提高安全性和稳定性,同时减少内存使用[1]
  • mod_python可以让你访问Apache的一些内部功能

关于WSGI的一般情况:

  • 有很多可以重复使用的中间件(比如身份验证、授权、会话管理、缓存、过滤等)
  • 在非Apache的网络服务器上部署也很简单,可以通过原生的WSGI支持或者flup来实现

[1] - 这是和preforking模式的Apache相比,后者在每个进程中都维护一个单独的Python解释器

撰写回答