【问题标题】:Why should I use WSGI?为什么要使用 WSGI?
【发布时间】:2010-12-21 06:25:17
【问题描述】:

使用 mod_python 有一段时间了,我读了越来越多关于 WSGI 有多好的文章,但并没有真正理解为什么。

那我为什么要切换到它呢?有什么好处?这很难吗?学习曲线值得吗?

【问题讨论】:

  • 如果您打算使用 Google AppEngine,那么 WSGI 是必须的。
  • .... 因为 GAE 只支持 WSGI。我无法将 mod_python 与具有良好置信度的 WSGI 进行比较。我只是提供一个意见供您参考。
  • 对不起,我想更正我的评论并删除它然后放回去......好吧,所以如果我想在 GAE 上使用 django,那么我必须去 WSGI 吗?
  • 天哪,我找到了这个,它真的解释了一切:svn.colorstudy.com/home/ianb/wsgi-tutorial/slides.odp

标签: python wsgi


【解决方案1】:

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

通常,如果你有一个像 NGINX 或 Apache 这样的 Web 服务器,你必须启用模块(尽管两种情况下模块的配置是不同的)。

WSGI 是 PEP 3333 中描述的标准,基本上,它提供了用 Python 编写的 Web 应用程序和 Web 服务器之间的标准接口。

这意味着,WSGI 为您的 Python Web 应用程序提供了跨许多不同 Web 服务器的可移植性,而无需在 NGINX、Apache 等上进行任何额外配置。

除此之外,与 Web 服务器相比,WSGI 服务器可以为您提供更多功能和更多灵活性。 Gunicorn,提供了很多功能,例如:

  • 处理请求的工作线程数
  • 同时客户端的最大数量。
  • 最大挂起连接数。
  • 限制 HTTP 请求标头字段的允许大小。
  • 工作人员在重新启动之前将处理的最大请求数。

Here 是关于 Gunicorn 支持的选项的完整文档。


难不难,学习曲线值得吗?

作为软件开发人员,您不需要了解有关标准的每一个细节,但作为系统管理员,您可能需要了解更多,而不仅仅是做pip install gunicorn 等等。

参考文献

【讨论】:

    【解决方案2】:

    mod_wsgi 与 mod_python:

    • mod_wsgi 快一点(内部有更多的 C,更少的 Python)
    • mod_wsgi 进程可以与 Apache 隔离,从而提高安全性/稳定性并减少内存使用[1]
    • mod_python 让您可以访问 Apache 的一些内部结构

    一般的WSGI:

    • 大量可重用的中间件(身份验证/授权、会话内容、缓存、过滤)
    • 通过原生 WSGI 支持或 Flup 在非 Apache 网络服务器上轻松部署

    [1] - 与 preforking Apache 相比,后者在每个进程中维护一个单独的 Python 解释器

    【讨论】:

      【解决方案3】:

      要使用 Python 开发复杂的 Web 应用程序,您可能会使用更全面的 Web 开发框架,例如 DJango、Zope、Turbogears 等。作为应用程序开发人员,您不必过多担心 WSGI。您需要注意的是这些框架支持 WSGI。 WSGI 允许分离 Web 服务器和 Web 应用程序代码,只要 Web 应用程序与 WSGI 兼容,系统管理员就可以更改 Web 服务器。如果您在其中一个框架中进行开发,那么您无论如何都会满足这个条件。

      如果您是 Web 框架开发人员(即开发 DJango 或 Zope 本身),那么您必须更深入地了解 WSGI。

      【讨论】:

        【解决方案4】:

        大多数 Python 框架都实现了 wsgi。有用于 apache 的 mod_wsgi 和用于其他模块的 SCGI/FastCGI/AJP 模块 + Flup。这样一来,您就可以拥有一个单独的 Python 进程的所有优点,而无需绑定到一个网络服务器。

        【讨论】:

          【解决方案5】:

          WSGI是标准的API,可以让你选择webserver,前面还放了一个Repoze之类的WSGI管道。

          http://repoze.org/

          【讨论】:

            【解决方案6】:

            您不必重新学习太多,因为从开发人员的角度来看,区别只是一个小的包装器和一些服务器配置。

            从部署的角度来看,不同之处在于您的 python 代码位于与网络浏览器不同的进程中,这意味着

            a) python 进程可以作为 Web 服务器以外的其他用户运行。如果使用得当,这对安全性很有价值。

            b) Web 服务器进程不需要包含 python 运行时。如果服务器运行大量“其他”请求(静态文件等)和一些繁重的 python 请求,这可能会大大提高性能。

            【讨论】:

            • a) 和 b) 都与 WSGI 无关,你也可以用普通的 SCGI/FastCGI/AJP 来做。
            • 嗯,我用的是mod_python,所以我猜他的anwser很有用。
            • 您可以使用 mod_python 运行 WSGI 应用程序。
            • 嗯,是的。我的回答涉及 wsgi (以正常方式使用)和 mod_pyton (以正常方式使用)之间的区别,因为我认为这就是问题所在。
            • 关于 mod_wsgi,(b) 是错误的。在 mod_wsgi 中,Web 服务器进程仍然包含 Python 运行时。它的存在不会影响静态请求或其他语言模块请求的性能。
            猜你喜欢
            • 2015-01-16
            • 2014-01-13
            • 1970-01-01
            • 2015-10-10
            • 1970-01-01
            • 2016-06-11
            • 2017-05-16
            • 2012-08-22
            • 2016-09-12
            相关资源
            最近更新 更多