FastAPI Uvicorn
与Flask框架不同,FastAPI并不包含任何内置的开发服务器。因此,我们需要 Uvicorn。 它实现了 ASGI 标准,速度快如闪电。ASGI是 Asynchronous Server Gateway Interface的缩写。
符合 WSGI (Web Server Gateway Interface – 较早的标准)的Web服务器不适合 asyncio 应用。实现ASGI规范的Python网络框架(如FastAPI)提供高速性能,可与用Node和Go构建的网络应用相媲美。
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 中的任何变化都会自动反映出来,客户端浏览器上的显示也会自动刷新。In addition, the following command-line options may be used −
老号 | 命令和描述 |
---|---|
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] 事件循环的实现。[默认为自动]。 |
11 | --http [auto|h11|httptools] HTTP协议实现。[默认为自动]。 |
12 | --interface auto|asgi|asgi|wsgi 选择应用程序接口。[默认为自动]。 |
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服务器将以调试模式启动。