探索 Python Web 服务器的多元世界
本文将深入探讨多种可用于部署 Python 应用程序的 Web 服务器。我们首先会简要介绍 Web 服务器的工作原理以及服务器网关接口的重要性。随后,我们将逐一考察各种 Python Web 服务器,并突出它们的关键特性。这些服务器大多以 PyPI 包的形式提供,您可以轻松地在项目中安装并开始使用。
让我们开始这段探索之旅吧!
Web 服务器的概念
在开发 Python 应用时,我们通常会利用开发服务器进行测试。然而,当开发完成后,我们需要将应用部署到生产级别的服务器上。Web 服务器的核心功能是作为 HTTP 服务器,并在其之上添加其他增强功能。
一个 Python Web 服务器应该能够处理来自客户端(如 Web 浏览器)的 HTTP 请求(包括 GET、PUT 和 POST 等),并返回相应的响应。响应可能包含 HTTP 状态码,指示请求是否成功处理,也可能包含 HTML 网页或结构化数据,如 JSON、XML 等。
服务器网关接口:ASGI 与 WSGI
假设你已经使用 Django 或 Flask 等框架开发了一个 Python 应用。传统的服务器可能无法直接理解和处理发往 Python 应用的请求,这时就需要服务器网关接口来发挥作用。
这个接口可以是 Web 服务器网关接口 (WSGI) 或异步服务器网关接口 (ASGI)。Web 服务器接收客户端请求后,会将其转发到服务器网关接口。接口(WSGI 或 ASGI)则通过公开的可调用对象与 Python 应用进行交互。
Web 服务器网关接口 (WSGI) 以顺序方式处理请求。如果有多个耗时的 HTTP 请求,则会影响吞吐量。
异步服务器网关接口 (ASGI) 是 WSGI 的升级版,具备异步处理请求的能力。例如,如果当前正在处理的请求需要进行数据库读取(这可能需要较长时间),并且正在等待响应,那么 ASGI 可以在第一个请求等待期间处理第二个传入的请求。
这与 WSGI 不同,后者必须先完成第一个请求的处理才能处理第二个请求。因此,使用 ASGI 可以显著提高吞吐量。此外,ASGI 还允许你在应用程序中使用异步 Python 功能。
Python Web 服务器一览
现在,让我们列举一些可用于 Python 应用程序的 Web 服务器。我们还会介绍一些框架,它们为生产就绪的服务器提供了开箱即用的支持。请注意,这不是一个详尽的列表,以下服务器的顺序并不代表任何特定的偏好。
Uvicorn
如果你使用过 FastAPI 进行应用开发,你一定对 Uvicorn 很熟悉。Uvicorn 是 Python 的 ASGI 服务器实现。
要使用 pip 安装 Uvicorn 及其依赖项,请运行以下命令:
$ pip install uvicorn[standard] # 包括安装可选的和基于 Cython 的依赖项
Uvicorn 的主要特点包括:
- ASGI 实现
- 支持在异步 Python 环境中运行应用程序
- 提供具有广泛选项的命令行工具
- 支持从工厂函数运行应用程序
- 提供以编程方式控制服务器实例的功能
Gunicorn
Gunicorn 是一个为 Python 应用程序设计的 WSGI 服务器,它以其强大的进程管理功能而闻名。
Uvicorn 提供了 Gunicorn 工作类,让你同时获得性能和进程管理优势。你可以在这里找到有关部署 Gunicorn 的详细信息。
如果你的 Python 版本是 3.5 或更高,可以使用 pip 安装 Gunicorn:
$ pip install gunicorn
Gunicorn 的主要特点包括:
- 简单快速
- 与许多 Web 框架兼容
- 支持与 HTTP 代理服务器一起使用
- 先进的进程管理
CherryPy
CherryPy 是一个 Python Web 框架,类似于 Django、Flask 和 FastAPI,但知名度不如它们。CherryPy 已经发布了几个稳定版本,并发展成为了一个成熟的框架超过十年。它还拥有一个活跃的开发者社区。
你可以参考有趣的 CherryPy Zen,它传达了 CherryPy 是一个简单、极简但功能强大的框架的精髓。
CherryPy 虽然是一个 Python 框架,而非 Web 服务器,但之所以将其列入此列表,是因为它与其他大多数框架不同,它原生支持生产级服务器。
要安装 CherryPy 并开始使用,请运行:
$ pip install CherryPy
CherryPy 的主要特点包括:
- 基于面向对象 Python 的 Pythonic 框架,非常适合初学者
- 支持生产就绪的 HTTP 服务器 Cheroot
- 比其他 Web 框架(如 Django)更易于学习
- 支持构建简单的 Web 应用程序并将其部署到微服务
Daphne
Django 是最受欢迎的 Python Web 框架之一。如果你使用 Django 开发过应用程序,你可能已经使用过 Daphne Web 服务器。Daphne 是最早用作 ASGI 服务器实现参考的 ASGI 服务器实现之一。
Daphne 以 PyPI 包的形式提供,你可以使用 pip 进行安装。
$ pip install daphne
你可以参考这里的详细教程,它将引导你构建一个全栈生产就绪的 Python 应用程序。
Daphne 的主要特点包括:
- 广泛应用于生产环境
- 所有 ASGI 服务器实现的参考
- 支持 HTTP、HTTP2 和 WebSocket 协议
Trio
Trio 项目旨在提供生产级的异步 I/O 功能,支持并行 I/O 和并发。该项目还包含多个用于 Web 和 HTTP 的 Python 库。
你可以从 PyPI 安装最新版本的 Trio (截至 2022 年 6 月):
$ pip install trio
以下是一些有用的 Trio 库,它们用于使用 Python 进行 Web 编程:
- hypercorn:Hypercorn 是一个支持 HTTP 的 ASGI 服务器
- muffin:Muffin 是一个用于 Python 的 ASGI Web 框架
- startlette:Starlette 是一个轻量级的 ASGI 框架
- trio-websocket:支持 WebSocket 服务器和客户端
- httpx:Python 的 HTTP 客户端
Twisted
Twisted 是一个用于 Python 应用程序的框架。这个事件驱动的框架包含一个名为 twisted.web 的 Web 编程模块。
你可以使用 pip 安装 Twisted 及其相关模块:
$ pip install Twisted
Twisted 的主要特点包括:
- 提供开发者友好的功能,例如单元测试和静态代码检查
- twisted.web 提供 WSGI 服务器,并支持 HTTP 客户端和服务器
AIOHTTP
AIOHTTP 是一个 Python 库,通过客户端和服务器 API 提供客户端和服务器端功能。
你可以观看这个视频,它解释了客户端的异步编程功能,可以显著加速 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
- 非常适合需要长时间连接的应用程序
- 用于日志记录、单元测试等的实用工具
- 与身份验证服务无缝集成
Meinheld
Meinheld 是 Python 的 WSGI 服务器。它使用并构建用于事件处理和 HTTP 请求处理的现有库。
你可以使用 pip 安装 Meinheld:
$ pip install meinheld
Meinheld 的一些特点:
- 使用 http-parser 库处理传入的 HTTP 请求
- 构建在 picoev 库之上以进行事件处理
总结
我希望这份 Python Web 服务器列表对你有所帮助。请务必在未来的项目中尝试它们。我们列出了主要功能,要全面理解它们的依赖关系以及工作原理,你需要在应用程序中实际使用它们。 👩🏽💻
如果你想提高你的 Python 技能,请考虑浏览 techblik.com 的 Python 教程库。祝你编程愉快!