尝试用于您下一个项目的9个Python Web服务器
在这个列表中,我们介绍了几个可以用来部署Python应用程序的Python web服务器。
首先,我们将了解Web服务器的工作原理和服务器网关接口的需求。然后,我们将列出Python web服务器的列表以及它们的特点。它们中的大多数都可以作为PyPI packages安装和在您的项目中使用。
让我们开始吧!
什么是Web服务器?
在开发Python应用程序时,您将使用开发服务器进行调试。然而,一旦开发完成,您将需要将应用程序部署到一个生产级别的服务器上。在添加了许多附加功能之后,一个Web服务器应该具有基本的服务器功能。
Python Web服务器应该能够处理来自客户端(如Web浏览器)的HTTP请求(诸如GET,PUT和POST等简单的HTTP请求)并返回响应。这个响应可能包括指示请求是否成功处理的HTTP状态码。它可能包含HTML网页和半结构化数据,如JSON, XML等。
ASGI vs. WSGI: 理解服务器网关接口
假设您使用您选择的框架(如Django或Flask)开发了一个Python应用程序。传统服务器可能无法理解和处理针对Python应用程序的请求。这就是服务器网关接口发挥作用的地方。
该网关接口可以是Web Server Gateway Interface (WSGI)或异步服务器网关接口(ASGI)。Web服务器接收来自客户端的请求,然后将其重定向到服务器网关接口。接口(WSGI / ASGI)通过一个可调用对象与Python应用程序进行交互。
Web服务器网关接口 (WSGI)按顺序处理请求。如果有多个慢速HTTP请求,那么它们将影响吞吐量。
异步服务器网关接口 (ASGI) 是WSGI的继任者,并且具有处理异步请求的附加功能。
假设当前正在服务的请求需要读取数据库(可能需要很长时间)并等待响应。当第一个请求等待响应时,ASGI可以处理第二个传入请求。
这与WSGI不同,WSGI必须在处理第二个请求之前处理第一个请求。因此,使用ASGI可能会增加吞吐量。ASGI还可以让您在应用程序中使用链接_5的功能。
Python Web服务器
现在,让我们列出您可以用于Python应用程序的Web服务器。我们还包括了一些提供生产就绪服务器的框架。这不是一个详尽无遗的列表,下面的Web服务器建议没有特定的顺序。
Uvicorn
如果您熟悉使用FastAPI进行应用程序开发,那么您可能已经遇到过Uvicorn,它是一个Python的Web服务器实现。Uvicorn是一个用于Python的ASGI服务器实现。
要使用pip
安装Uvicorn和相关依赖项,请运行以下命令:
$ pip install uvicorn[standard]
# 包括可选和基于Cython的依赖项的安装
以下是Uvicorn的特点:
- ASGI实现
- 支持从异步Python环境运行应用程序
- 具有广泛选项列表的命令行工具
- 支持从工厂函数运行应用程序
- 提供以编程方式控制服务器实例的功能
Gunicorn
Gunicorn 是一个用于Python应用程序的WSGI服务器,以其先进的进程管理功能而闻名。
Uvicorn提供了一个Gunicorn工作类,使您能够同时实现性能和进程管理优势。本文档页面包含有关deploying Gunicorn的详细信息。
如果您使用Python 3.5及更高版本,可以使用pip安装Gunicorn:
$ pip install gunicorn
Gunicorn的主要特点如下:
- 简单快速
- 与许多网络框架兼容
- 支持与HTTP proxy server的使用
- 先进的进程管理
CherryPy
CherryPy是一个Python网络框架,类似于Django、Flask和FastAPI,但不像这些框架那样流行。CherryPy已经存在并发展成为一个完善的框架已有十多年了。它还有一个支持性的developer community。
您可以查看有趣的Zen of CherryPy,它传达了CherryPy是一个简单而简约但功能强大的框架的精髓。
CherryPy是一个Python框架,而不是一个Web服务器,但它在我们的列表中,因为它原生支持生产级服务器,而大多数其他框架都不支持。
要安装CherryPy并开始使用,请运行:
$ pip install CherryPy
CherryPy的主要特点如下:
- 使用面向对象的Python编写的Pythonic框架,非常适合初学者
- 支持用于生产就绪的HTTP服务器Cheroot
- 比其他诸如Django等Web框架更容易学习
- 支持构建和部署简单的Web应用程序到微服务
Daphne
Django是最受欢迎的Python网络框架之一。如果您使用Django开发应用程序,您可能会使用到Daphne Web服务器。Daphne是最早用作ASGI服务器实现参考的ASGI服务器实现之一。
Daphne可以作为一个PyPI软件包安装,您可以使用pip安装。
$ pip install daphne
这是一个详细的教程,将指导您构建一个完整的生产级Python应用程序。
Daphne的主要特点如下:
- 在生产环境中被广泛采用
- 所有ASGI服务器实现的参考
- 支持HTTP、HTTP2和WebSocket协议
Python Trio
Trio project旨在提供生产级异步I/O功能:支持并行I/O和并发。该项目还有几个用于Web和HTTP的Python库。
您可以从PyPI安装最新版本的Trio(2022年6月)。
$ pip install trio
以下是用于Python Web编程的有用的Trio库列表:
hypercorn
:Hypercorn是一个支持HTTP的ASGI服务器muffin
:Muffin是一个用于Python的ASGI Web框架starlette
:Starlette是一个轻量级的ASGI框架trio-websocket:支持WebSocket server和客户端
httpx
:Python的HTTP客户端
Twisted Web
Twisted是一个用于Python应用程序的框架。这个事件驱动的框架包括一个用于Web编程的模块twisted.web
。
您可以使用pip安装Twisted及其相关模块:
$ pip install Twisted
Twisted的主要特点如下:
- 开发人员友好的功能,如单元测试和静态代码检查
twisted.web
提供了一个WSGI服务器和对HTTP客户端和服务器的支持
AIOHTTP
AIOHTTP是一个Python库,通过客户端和服务器API提供客户端和服务器端功能。
这里有一个有用的视频,解释了客户端的asynchronous编程能力,可以显著加快对API的请求速度。
AIOHTTP的主要特点如下:
- 支持HTTP服务器和客户端功能
- 支持记录日志以便更容易进行调试;为客户端、服务器、Web套接字等提供记录日志的功能
- 原生支持通过pytest插件进行测试:pytest-aiohttp,可作为PyPI软件包使用
Tornado
Tornado是另一个支持异步网络的Python Web框架。近年来,Tornado有许多稳定版本的发布,最新版本为6.2,于2022年7月发布。目前,Tornado支持Python 3.7及更高版本。
与列表中的大多数软件包一样,Tornado也可以使用pip
进行安装:
$ pip install tornado
Tornado的主要特点如下:
- 支持HTTP服务器
tornado.httpserver
和客户端 - 可扩展且使用非阻塞的网络I/O
- 非常适合需要长时间连接的应用程序
- 提供记录日志、unit testing等实用工具
- 与身份验证服务无缝集成
Meinheld
Meinheld是Python的WSGI服务器。它使用和构建现有的库来处理事件和HTTP请求。
您可以使用pip安装Meinheld:
$ pip install meinheld
Meinheld的一些特点:
- 使用
http-parser
库来处理传入的HTTP请求 - 在事件处理方面建立在
picoev
库的基础上
结论
希望您会发现这个Python Web服务器列表有帮助。请务必在将来的projects中尝试它们。我们列出了关键特性;要完全理解依赖关系和它们的工作原理,您需要在应用程序中使用它们。👩🏽💻
如果您想提升您的Python技能,请考虑查看Geekflare的Python tutorials库。祝您编码愉快!