方式1-命令启动
生成环境、开发环境都适合
格式
uvicorn 文件名:app实例
代码
创建 main.py 文件,内容如下:
from fastapi import FastAPI
app = FastAPI()
# 根路由
@app.get("/")
async def root():
return {"message": "Hello FastAPI"}
启动命令
uvicorn main:app --reload
参数说明
main:文件名称 main.pyapp:代码里app = FastAPI()的变量名
启动命令-指定ip、port
绑定所有网卡的8000端口
uvicorn main:app --reload --host 0.0.0.0 --port 8000
常用参数
uvicorn main:app \
--host 0.0.0.0 \
--port 8000 \
--reload \
--log-level debug \
--access-log
参数解释
| 参数 | 含义 |
|---|---|
--host 0.0.0.0 |
监听所有网卡,局域网其他设备可以访问;默认 127.0.0.1 只能本机 |
--port 8000 |
指定服务端口,默认端口号 8000 |
--reload |
代码变更自动重启,仅开发使用,生产必须删除 |
--log-level debug |
日志级别,默认是 info:critical > error > warning > info > debug |
--access-log |
开启访问日志(打印每条http请求),默认开启;--no-access-log 关闭 |
方式2-代码启动
本地简单调试、一键启动 Demo、小型脚本测试,仅限开发
不适合生成环境
- 无法配合 gunicorn 多进程部署;
- 信号处理、进程管理不友好,容器、systemd 托管时容易出现无法正常优雅关闭;
- 无法直接使用 uvicorn 官方命令行全部参数;
- 导入顺序陷阱:直接传入 app 对象时,搭配 —reload 容易出现重复加载问题;
- 主流运维规范、容器镜像最佳实践都不推荐。
代码
创建 main.py 文件,内容如下:
from fastapi import FastAPI
import uvicorn
app = FastAPI()
# 根路由
@app.get("/")
async def root():
return {"message": "Hello FastAPI"}
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=8000)