FastAPI - Uvicorn 服务器
与 Flask 框架不同的是,FastAPI 不包含任何内置的开发服务器。 因此,我们需要Uvicorn。 它实现了 ASGI 标准,而且速度很快。 ASGI 代表异步服务器网关接口。
符合 WSGI(Web 服务器网关接口——旧标准)的 Web 服务器不适合 asyncio 应用程序。 实现 ASGI 规范的 Python Web 框架(例如 FastAPI)提供高速性能,可与使用 Node 和 Go 构建的 Web 应用程序相媲美。
Uvicorn 使用 uvloop 和 httptools 库。 它还提供对 HTTP/2 和 WebSockets 的支持,这是 WSGI 无法处理的。 uvloop id 类似于内置的 asyncio 事件循环。 httptools 库处理 http 协议。
如前所述,Uvicorn 的安装将以最少的依赖项进行安装。 但是,标准安装还将安装基于 cython 的依赖项以及其他附加库。
pip3 install uvicorn(standard)
有了这个,WebSockets 协议将被支持。 此外,PyYAML 将被安装以允许您提供 .yaml 文件。
如前所述,使用以下命令在 Uvicorn 服务器上启动应用程序 −
uvicorn main:app –reload
--reload 选项启用调试模式,这样 app.py 中的任何更改都会自动反映出来,客户端浏览器上的显示也会自动刷新。 此外,还可以使用以下命令行选项 −
Sr.No | 命令 & 描述 |
---|---|
1 | --host TEXT 将套接字绑定到这个主机。 [默认 127.0.0.1] |
2 | --port INTEGER 将套接字绑定到这个端口。 [默认 8000] |
3 | --uds TEXT 绑定到 UNIX 域套接字。 |
4 | --fd INTEGER 从此文件描述符绑定到套接字。 |
5 | --reload 启用自动重新加载。 |
6 | --reload-dir PATH 明确设置重新加载目录,默认当前工作目录。 |
7 | --reload-include TEXT 在查看时包括文件。 默认包含 '*.py' |
8 | -reload-exclude TEXT 在查看文件时排除。 |
9 | --reload-delay FLOAT 上次检查和下一次检查之间的延迟默认 0.25 |
10 | -loop [auto|asyncio|uvloop] 事件循环实现。 [默认 auto] |
11 | --http [auto|h11|httptools] HTTP 协议实现。 [默认 auto] |
12 | --interface auto|asgi|asgi|wsgi 选择应用程序界面。[默认 auto] |
13 | --env-file PATH 环境配置文件。 |
14 | --log-config PATH 日志配置文件。 支持的格式 .ini、.json、.yaml。 |
15 | --version 显示uvicorn 版本并退出。 |
16 | --app-dir TEXT 在指定目录下查找APP默认当前目录 |
17 | --help 显示此消息并退出。 |
除了从命令行启动 Uvicorn 服务器,它也可以通过编程方式启动。
示例
在 Python 代码中,使用上面列出的任何参数调用 uvicorn.run() 方法 −
import uvicorn from fastapi import FastAPI app = FastAPI() @app.get("/") async def index(): return {"message": "Hello World"} if __name__ == "__main__": uvicorn.run("main:app", host="127.0.0.1", port=8000, reload=True)
现在将此 app.py 作为 Python 脚本运行如下 −
(fastapienv) C:\fastapienv>python app.py
Uvicorn 服务器将因此以调试模式启动。