1.基础用法
1 | # 使用FastAPI CLI启动4个工作进程 |
--workers参数指定进程数量,建议设置为CPU核心数的1-2倍- 启动日志显示父进程管理多个子进程,例如:
1
2
3INFO: Started parent process [27365]
INFO: Started server process [27368]
INFO: Started server process [27369] - 流程图展示多进程架构:
graph TD A[客户端请求] --> B[Gunicorn主进程] B --> C[Uvicorn Worker1] B --> D[Uvicorn Worker2] B --> E[Uvicorn Worker3] C & D & E --> F[FastAPI应用]
2.核心组件协作
2.1 Gunicorn与Uvicorn关系
- Gunicorn作为进程管理器,负责端口监听和请求分发
- Uvicorn Worker处理ASGI协议,执行FastAPI应用逻辑
- 协作优势:
- 利用多核CPU并行处理请求
- 隔离单个进程崩溃影响
- 支持动态扩容缩容
2.2 生产环境配置建议
1 | # 推荐Docker部署配置 |
- 重要参数说明:
参数 作用 推荐值 -w Worker数量 CPU核心数×2 –timeout 请求超时时间 120秒 –log-level 日志级别 warning
3.生产环境优化
- 性能调优:
- 禁用调试模式(
--no-debug)和自动重载(--no-reload) - 使用Redis连接池替代单数据库连接
- 禁用调试模式(
- 健康检查:
1
2
3
4
5# Kubernetes配置示例
livenessProbe:
httpGet:
path: /health
port: 8000 - 资源限制:
1
2# 使用cgroups限制内存
systemd-run --scope -p MemoryLimit=2G uvicorn main:app - 日志管理:
- 配置JSON格式日志方便ELK收集
- 分离访问日志与错误日志
4.注意事项
- 信号处理:
- 父进程收到SIGTERM会优雅关闭所有Worker
- 使用
kill -TERM <父进程ID>进行安全关闭
- 版本兼容:
- FastAPI 0.68+ 需要Uvicorn 0.13+
- 避免直接指定Starlette版本
- 容器部署:
1
2# 官方推荐基础镜像
FROM tiangolo/uvicorn-gunicorn-fastapi:python3.9
测试命令示例:
1
2
3
4
5 # 查看进程树
pstree -p | grep uvicorn
# 压力测试
wrk -t4 -c100 -d30s http://localhost:8000/