适用于Python 3的WSGI服务器(PEP 3333)

时间:2011-09-14 20:25:06

标签: python python-3.x wsgi

哪些WSGI服务器可用于Python 3和PEP 3333

7 个答案:

答案 0 :(得分:8)

正如Gabriel所指出的,Apache / mod_wsgi 3.X支持Python 3.其他选项是CherryPy WSGI服务器和uWSGI

答案 1 :(得分:8)

服务员

Waitress是一个生产质量纯的Python WSGI服务器,具有非常可接受的性能。它除了存在于Python标准库中的依赖项之外没有依赖项。它运行在Unix和Windows上的CPython和Python 2.6+和Python 3.2下。众所周知,在UNIX上运行PyPy 1.6.0。它支持HTTP / 1.0和HTTP / 1.1。

以下是他们网站上有关他们编写原因的原因:

  

为什么?

     

在Waitress发布时,已有许多纯Python WSGI服务器。为什么我们需要另一个?

     

Waitress对于需要广泛平台支持的Web框架作者非常有用。它既不是最快也不是最好的WSGI服务器,但使用它有助于消除N-by-M文档负担(例如,生产与部署,Windows与Unix,Python 3与Python 2,PyPy与CPython)以及由此产生的用户当前(2012-ish)WSGI服务器的平庸平台支持造成的混乱。例如,gunicorn很棒,但不能在Windows上运行。 paste.httpserver是完全可以维护的,但不能在Python 3下运行,并且没有专用的测试套件,允许执行Python 3端口的人知道它在端口完成后工作。 wsgiref在大多数Python下运行良好,但它有点慢,不建议用于生产,因为它是单线程的,并且没有因安全问题而被审计。

     

在撰写本文时,一些现有的WSGI服务器已经声称具有广泛的平台支持并且具有可维护的测试套件。例如,CherryPy WSGI服务器面向Python 2和Python 3,它可以在UNIX或Windows上运行。但是,它并不是与其同名的Web框架分开分配,并且要求非CherryPy Web框架仅仅因为其服务器组件而依赖于CherryPy Web框架分发是很尴尬的。 CherryPy服务器的测试套件也依赖于CherryPy Web框架,因此即使我们将其服务器组件分成单独的发行版,我们仍然需要回填其所有测试。 CherryPy团队已经开始研究Cheroot,但是应该解决这个问题。

     

Waitress是zope.server中存在的与WSGI相关的组件的分支。 zope.server具有开箱即用的可通过框架的测试覆盖率,并且在fork期间添加了更多的覆盖范围。自2001年左右以来,zope.server已经以某种形式存在,并且从那时起已经看到了生产用途,所以Waitress并不是“另一个”服务器,它更像是一个已经知道工作得很好的旧服务器的重新包装。 / p>

答案 2 :(得分:5)

显然,根据PEP 3333,最新版本的mod_wsgi(3.3)与Python 3兼容:

http://code.google.com/p/modwsgi/

  

“最初的WSGI规范(PEP 333)仅支持Python 2.X.   Python 3.X的mod_wsgi支持基于猜测   关于Python 3.X的WSGI规范是什么样的。该   新的WSGI规范(PEP 3333)现在终于被接受了   虽然需要对mod_wsgi进行一些调整以使其更多   严格,如果您根据PEP编写Python 3 WSGI应用程序   3333,它将在mod_wsgi上完美运行。如果你愿意的话   尝试使用Python 3.X,您需要使用Python 3.1或更高版本。“

答案 3 :(得分:2)

我喜欢Rocket Web server,特别是因为它本身是用python编写的。它还有一个用于创建其他类型服务器的API。我能够以最少的努力使其适应XMLRPC服务器。

答案 4 :(得分:1)

wsgiref,它是标准库的一部分。

答案 5 :(得分:1)

从版本3.0开始,

Phusion Passenger支持PEP333。它最初是一个Ruby应用服务器,现在正式支持Python。其中的功能包括:

  • 直接集成到Web服务器(类似于mod_wsgi的工作方式),但运行Web服务器外的所有应用程序进程。
  • Apache和Nginx支持。
  • Evented内部I / O架构。
  • 多进程应用程序工作者I / O体系结构。 Phusion Passenger缓冲所有输入和输出,以保护应用程序免受慢速客户端的影响。
  • 通过实时刷新输出缓冲。
  • 根据流量动态生成和停止工作进程。
  • 自动用户切换,方便的安全功能。
  • 滚动重启。

Phusion Passenger目前被纽约时报,AirBnB,皮克斯,赛门铁克等大型团体使用。

答案 6 :(得分:1)

bjoern:快速超轻量的HTTP / 1.1 WSGI服务器

引用README

  

为什么很酷

     

bjoern是目前最快,最小,最轻便的WSGI服务器,具有

     
      
  • 〜1000行C代码
  •   
  • 内存占用量〜600KB
  •   
  • Python 2和Python 3支持
  •   
  • 单线程,没有协程或其他废话
  •   
  • 可以绑定到TCP host:端口地址和Unix套接字
  •   HTTP / 1.0和1.1中的
  • 完全持久连接(“保持活动” )支持,包括对HTTP / 1.1分块响应的支持
  •   

如果您查看网络上的WSGI服务器基准测试(例如A Performance Analysis of Python WSGI Servers),则性能提升的确令人惊讶:

enter image description here

如何安装

$ pip install bjoern

先决条件

在构建gcc之前,您需要先安装libevbjoern软件包:

  • Debian / Ubuntu

    $ sudo apt install build-essential
    $ sudo apt install libev-dev
    
  • RHEL / CentOS

    $ sudo yum groupinstall 'Development Tools'
    $ sudo yum install libev-devel
    
  • Fedora

    $ dnf groupinstall 'Development Tools'
    $ sudo dnf install libev-devel
    
  • MacOS

    从App Store安装XCode以获得gcc;对于libev,可以从源代码构建或安装vie Homebrew:

    $ brew install libev
    
  • Windows

    不幸的是,由于libev不可用,因此不支持Windows。

meinheld:高性能异步WSGI Web服务器(基于picoev)

引用official site

  

Meinheld是一种符合WSGI的高性能Web服务器,它利用greenlet和picoev来以轻量级的方式启用异步网络I / O。

bjoern类似,meinheld大多是用C语言编写的,以提高速度,它是围绕高性能事件库({{1}与libev,{{1} }。因此,您还需要安装GCC才能构建bjoern的C扩展名。可安装在Linux,MacOS和FreeBSD上。

安装

meinheld