为什么 FastAPI 适合用 Uvicorn

TL;DR:Uvicorn 很适合 FastAPI。如果使用 FastAPI,建议首选 Uvicorn 作为 ASGI Web 服务器

FastAPI

FastAPI 是一个 Python 框架。

WSGI&ASGI

WSGI (Web Server Gateway Interface) Servers 是一种 Python Web 服务器技术,它定义了 Web 服务器和 Python Web 应用程序之间的标准接口。WSGI 服务器为不同的 Python Web 框架和 Web 服务器提供一个通用接口,增强互操作性。WSGI 服务器接收 HTTP 请求,将其转换为 WSGI 环境,调用 Python 应用,然后将响应发送回客户端。

ASGI(Asynchronous Server Gateway Interface,异步服务器网关接口)是 WSGI 的精神继承者,旨在在支持异步的 Python Web 服务器、框架和应用程序之间提供标准接口。

WSGI 是同步的,每个请求在处理完成前会阻塞线程。而 ASGI 则为异步和同步应用程序提供了一种标准,具有 WSGI 向后兼容性实现以及多个服务器和应用程序框架。

Uvicorn

而 Uvicorn 是一个快速的 ASGI web 服务器,专为 Python 设计。

为什么FastAPI适合用Uvicorn

  1. FastAPI 主要设计用于与 ASGI 服务器一起使用,而不是 WSGI 服务器。FastAPI 也需要一个 ASGI 服务器来运行。Uvicorn可以提供异步支持。FastAPI 重度使用 Python 的异步特性。Uvicorn 作为一个异步服务器,能够充分发挥 FastAPI 的异步性能。
  2. Uvicorn 是一个非常快速的 ASGI 服务器,它基于 uvloop 和 httptools 构建,这两者都是用 Cython 写的高性能 Python 网络库。
  3. 开发便利性:
    Uvicorn 提供了热重载功能(通过 –reload 参数),这在开发过程中非常有用,可以实时看到代码修改的效果。热重载是指,在开发过程中,当你修改代码后,服务器能够自动检测到这些更改并重新启动,使新的代码变更立即生效,而无需手动停止和重启服务器。热重载功能可以大幅提高开发效率。
  4. 轻量级,且易于使用:
    Uvicorn 是一个轻量级服务器,不会给应用增加太多额外的复杂性或开销。Uvicorn 使用很简单,几乎不用额外学习即可上手。通常只需一行命令就可以启动 FastAPI 应用。

对比其他 ASGI 服务器:

Daphne或许更适合Django,不是 FastAPI的最佳选择。
Hypercorn 性能可能不如Uvicorn,配置可能相对复杂。
Gunicorn (with Uvicorn workers)。Gunicorn本身是一个WSGI服务器,但它可以使用Uvicorn workers来支持ASGI。主要缺点也是配置更复杂一点。

参考链接:ASGI Documentation

Full Stack Python