生产环境必须用 gunicorn + uvicornworker 组合,配 nginx 反向代理,并由 systemd 或 supervisor 管理进程;uvicorn --reload 仅限开发,无进程管理、无健康检查、不支持平滑重启。

直接上生产环境,别用 uvicorn 命令跑开发模式 —— 它没进程管理、没自动重启、不抗压,上线即崩。
为什么不能只用 uvicorn --reload 启动
开发时用 uvicorn main:app --reload 很方便,但生产中它只是单进程、无守护、无健康检查的裸服务器。遇到内存泄漏、Worker卡死、请求堆积,uvicorn 自己不会拉起新进程,也不会把坏掉的 Worker 杀掉重开。
- 没有进程保活:崩溃后服务就彻底不可用
- 无法限制并发数:
--limit-concurrency有但没兜底机制,超载容易拖垮整个进程 - 日志不分离:错误日志和访问日志混在终端里,没法集中收集或轮转
- 不支持平滑重启:改代码后 reload 会中断所有长连接(比如 WebSocket)
必须用 Gunicorn + UvicornWorker 组合
生产部署 FastAPI 的事实标准是 gunicorn 主控进程 + uvicorn.workers.UvicornWorker 处理 ASGI 请求。Gunicorn 负责 fork 多个 Worker、监控存活、优雅重启;UvicornWorker 则保留异步能力,处理 HTTP/1.1 和 WebSocket。
-
-k uvicorn.workers.UvicornWorker是关键,漏写就退化成同步 WSGI 模式,FastAPI 的 async 路由全失效 -
-w建议设为2 * CPU核心数 + 1,比如 4 核机器用-w 9;超过 12 个 Worker 反而因上下文切换降低吞吐 -
--timeout 120必须设,防止慢查询或外部调用卡住 Worker 导致全部阻塞 -
--keep-alive 5控制空闲连接保持时间,太长浪费 fd,太短增加前端建连开销
示例启动命令:gunicorn -k uvicorn.workers.UvicornWorker -w 4 -b 0.0.0.0:8000 --timeout 120 --keep-alive 5 main:app
SkillSub Pro - Python 题解与代码注释双功能技能功能概述SkillSub Pro - Python 题解与代码注释双功能技能是一项面向实际任务的技能,主要用于SkillSub Pro 是一个 Python 题解生成与代码注释的 双功能合体技能 ,专为学生、算法学习者和开发者设计;✅ 一个技能,两种用途 :;核心要点📝 题解模式 :输入题目/题号,自动生成完整 Python 题解(含详细注释、解题思路、复杂度分析);💬 注释模式 :输入 Python 代码,自动添加详细中。它将相关步骤、
必须加 Nginx 做反向代理
别让 Gunicorn 直接暴露在公网。Nginx 不只是转发,它承担了静态文件服务、SSL 终结、请求限流、缓冲大请求体、防御慢速攻击等关键职责。
- SSL 必须由 Nginx 终结:
uvicorn或gunicorn自带的 HTTPS 支持弱,不支持 OCSP Stapling、ALPN 等现代特性 - 上传大文件时,Nginx 的
client_max_body_size和proxy_buffering能避免请求体直接打到 Python 进程导致 OOM - 用
proxy_http_version 1.1+proxy_set_header Upgrade $http_upgrade才能透传 WebSocket 升级头 - 别忘了配
proxy_read_timeout 120,否则 Nginx 默认 60 秒就断开后端长连接,和 Gunicorn 的--timeout不匹配
Supervisor 或 systemd 都行,但别跳过进程管理
Gunicorn 本身不是守护进程,关掉终端它就退出。必须用 supervisord 或 systemd 把它“钉”在后台。
- 用
systemd更轻量:写个/etc/systemd/system/fastapi.service,Restart=always+RestartSec=5就能自动恢复崩溃 - 用
supervisord要注意autostart=true和autorestart=unexpected,避免频繁崩溃被锁住 - 无论哪种,都得配
StandardOutput=append:/var/log/fastapi/access.log,别依赖 Gunicorn 自己的日志路径,容易权限出错 - 别把
gunicorn命令写进 shell 脚本再用nohup启动 —— 这种方式无法被系统统一管理,ps aux | grep gunicorn都难定位
最容易被忽略的是 Gunicorn 的 --preload 参数:不加的话每个 Worker 都会单独 import 一次你的 main.py,如果里面做了数据库连接、全局缓存初始化,会导致资源重复创建甚至端口冲突。上线前务必加上。
大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!










