介绍
在本文中,我们将讨论三个主要内容:Python,Web服务器,最重要的是两者之间的位和块。
除了笑话,这篇相当长的文章似乎对一些寻找快速指导或答案可怕。 不幸的是,不像在Python世界大多数事情一样,当谈到选择一个生产服务器栈上部署应用程序,没有one--和最好只有一个--obvious办法做到这一点 。
但是,这不应该吓唬你。 完成本文后,您将了解不同的Web服务器如何工作,并处理与基于Python的Web应用程序交谈的任务。 在衡量您的需求和要求时,您将能够决定使用哪个服务器。
Python Web服务器网关接口v1.0(WSGI)
理解问题
今天,存在着越来越多的专门设计(或改编)以与Python Web应用程序交替使用的Web服务器(或服务器模块)。 然而,这并不总是这样。 在你古老的时代,开发人员没有真正有可能轻松地切换Web服务器,每个交换机都带来了成本,由于依赖和限制。 在决定一个框架的基础上,你也会决定,不总是愿意或有意识地,在服务器上,你可以用来服务应用程序。 这是由于缺乏普遍接受的存在的接口规范 :一个共同点哪些应用程序(框架)和Web服务器都将适应和用于通信,从而使当与可能是零码变更必要的组件的可互换性。
标准的诞生
在本世纪初,都作出努力,终于解决了问题与Python增强提案(PEP)333的呈现给社会。
This document specifies a proposed standard
interface between web servers and Python web
applications or frameworks, to promote web
application portability across a variety of
web servers.
正如PEP中所解释的,这个新标准是(并且)意味着允许在[web]服务器和[Python web]应用程序之间(和之间)的可移植性。 该标准的强大功能和广泛采用相比,从那以前的方式为今天:一个世界,许多(也许太多)的Web服务器愿意为你的工作存在。
比较
在对基于Python的Web应用程序的Web服务器的比较中,我们将讨论一些可用的选择以及使它们脱颖而出的因素。 这样做的目的是让读者有一个更清晰的视野和对应用程序的定制需要找到一个提供帮助,以配合服务器。 由于大量的选项(更多的弹出每天!),我们将过滤我们的方式通过和谈论那些是“特殊的”在各种方式:人气,坚实,或做一些不同的(或更好的)休息。
注:我想奉劝你,读者,要警惕这往往不能反映真实的生产环境条件的偏见和欺骗基准。 不幸的是,这些[文章]真的意义不大,当谈到选择一个Web服务器的生产,这也不太可能是导致瓶颈的部分。 因此,建议您衡量和了解自己的需求,然后尝试不同的选项,避免使用投机数字来避免真实的未来灾难情况。
Web服务器(字母顺序)
CherryPy WSGI服务器
它是什么?
CherryPy实际上是一个Web框架。 但它是一个完全独立的 - 意味着它可以自己运行,包括在生产场景中,而不需要额外的软件。 这是由于自己的WSGI,HTTP / 1.1兼容的Web服务器实现的。 CherryPy项目将其描述为“高速,生产就绪,线程池化,通用HTTP服务器”。 因为它是一个WSGI服务器,它可以用于服务于任何其他WSGI Python应用程序,而不必绑定到CherryPy的应用程序开发框架。
为什么要考虑使用它?
- 它是紧凑和简单。
- 它可以服务于在WSGI上运行的任何Python Web应用程序。
- 它可以处理静态文件,它只能用于单独提供文件和文件夹。
- 它是线程池。
- 它支持SSL。
- 它是一个容易适应,易于使用纯Python的替代品,是鲁棒和可靠的。
Gunicorn
它是什么?
Gunicorn是一个独立的网络服务器,提供了相当多的功能,在一个显着易于操作的时尚。 它使用前叉模型 - 意味着中央主进程(Gunicorn)负责管理启动的工作进程(不同类型),然后直接处理和处理请求。 所有这些都可以配置和调整,以适应您的需求和多样化的生产场景。
为什么要考虑使用它?
- 它支持WSGI,可以用于运行Python应用程序和框架的任何WSGI。
- 它也可以用作Paster(例如:Pyramid),Django的开发服务器,web2py等的替代品。
- 提供各种工人类型/配置和自动工作进程管理的选择。
- 通过同步和异步工作的HTTP / 1.0和HTTP / 1.1(Keep-Alive)支持。
- 提供SSL支持
- 可伸缩与钩。
- 它是透明的,有一个明确的架构。
- 支持Python版本2.6,2.7,3,3.2,3.3
Tornado(通过wsgi.WSGIContainer的HTTP服务器)
它是什么?
Tornado是一个应用程序开发框架和一个网络库,专为处理异步操作而设计,允许服务器维护大量开放连接。 它还带有一个WSGI服务器,其他WSGI Python应用程序(和框架)可以使用它运行。
为什么要考虑使用它?
- 如果你在顶层Tornado框架上构建; 要么
- 您的应用程序需要异步功能。
虽然在这些情况下,您可能想为您的项目选择Tornado的WSGI服务器,但您也可以选择使用Gunicorn与Tornado [异步]工作。
扭曲的网
它是什么?
Twisted Web是Twisted网络库附带的Web服务器。 而扭曲本身是“事件驱动的网络引擎”, 扭Web服务器上WSGI运行,并且它是能够供电其他Python web应用的。
为什么要考虑使用它?
- 它是一个使用简单,稳定和成熟的产品。
- 它将运行WSGI Python应用程序。
- 它可以像Python Web服务器框架一样,允许您使用自定义HTTP服务目的的语言对其进行编程。
- 它提供了通过简单和快速原型设计能力
Python Scrips (.rpy)
这是在HTTP请求执行。 - 它具有代理和反向代理功能。
- 它支持虚拟主机。
- 它甚至可以通过twisted.web.twcgi API提供Perl,PHP等。
uWSGI
它是什么?
尽管它非常混乱的命名规则, uWSGI本身就是一个浩大的工程包含多个组件,旨在提供一个full [software] stack
的building hosting services
。 其中一个组件,uWSGI服务器,运行Python WSGI应用程序。 它能够使用多种协议,包括自己的uwsgi线协议,这是准等同于SCGI的。 为了满足(可以理解的)需求的应用服务器的前面使用独立的HTTP服务器,NGINX和切诺基的Web服务器是模块化的支持uWSGI的(表现最好的)uwsgi协议,在其全部过程的直接控制。
为什么要考虑使用它?
- uWSGI带有一个WSGI适配器,它完全支持在WSGI上运行的Python应用程序。
- 它与libpython链接。 它在启动时加载应用程序代码,并像一个Python解释器。 它解析传入的请求并调用Python可调用的。
- 它直接支持流行的NGINX Web服务器(与Cherokee *和lighttpd一起)。
- 它写在C.
- 它的各种组件可以做更多的运行一个应用程序,这可能是方便的扩展。
- 目前(截至2013年底),它是积极开发和具有快速释放周期。
- 它具有用于运行应用程序(异步和同步)的各种引擎。
- 它可以意味着更低的内存占用运行。
服务器WSGI服务器
它是什么?
Waitress是一个纯Python WSGI服务器。 乍一看,它可能看起来不像许多其他人那么大不同; 然而,它的发展理念将其与其余的分离。 其目的是减轻由Web服务器为Python Web应用程序开发人员造成的生产(和开发)负担。 Waitress通过中和平台(例如Unix vs. Windows),解释器(CPython vs. PyPy)和Python(版本2和3)之间的差异来解决这个问题。
为什么要考虑使用它?
- 它是一个非常精简,纯Python解决方案。
- 它支持HTTP / 1.0和HTTP / 1.1(Keep-Alive)。
- 它已准备好部署用于生产与广泛的平台支持。
- 不像CherryPy,它实际上是框架独立的性质。
- 它运行在Windows和Unix上,以及CPython解释器和PyPy(仅限Unix)。
- 它支持Python版本2和3。
独立服务器的模块
mod_python与WSGI适配器(Apache)(嵌入Python)
它是什么?
简单地说,mod_python是一个Apache模块,在服务器本身嵌入Python。 虽然不推荐因为各种原因(项目已经死了,过时,只有最近的意图继续由原作者的开发),它可以用于通过包装器在Apache上运行WSGI应用程序。
为什么要考虑使用它?
出于特定原因,您可能希望使用Python来编程和扩展Apache。
mod_wsgi(Apache)(嵌入Python)
它是什么?
作为一个WSGI兼容的模块,国防部WSGI允许你运行Apache HTTP服务器上的Python WSGI应用程序。 它实现了这两种方式:第一个是类似于如何MOD作品python,通过嵌入代码和子进程中执行它。 另一种方法提供了一种基于守护进程的操作模式,由此WSGI应用程序有自己的不同进程,由mod_wsgi自动管理。
为什么要考虑使用它?
- Apache的现有经验对于运行Python也是一个稳定的生产环境。 这个可以节省一天,使它值得。
- 如果你依赖Apache或想利用其稳定和丰富的扩展模块,它将是要走的路。
- 它可以在不同系统用户下运行应用程序,以进一步提高安全性。
- 它是一个经过测试,可靠的软件。
- 万维网包含的信息和Q&A的关联吧吨 ,当你遇到一个真正的生产问题,可以为您节省大量的时间。
- 它具有Apache提供的所有其他功能。