在 FastAPI + Uvicorn 的使用:Workers(多进程) 和 reload(热重载)
在FastAPI开发和Uvicorn程序里,开发环境往往使用reload对代码做热重载,在生产环境使用worker执行多工作进程。FastAPI在0.96.0后支持dev环境热重载功能,是我们在开发代码的时候,可以快速调试代码。

热重载和多worker的互斥
$ pip install fastapi
$ pip install uvicorn
uvicorn的--workers(工作进程数)和--reload(自动重载)是两个常用参数,--workers用于生产环境增加并发,而--reload用于开发环境热重载;二者的核心关系是:互斥且适用场景完全不同!
关键是,在启用--reload时,--workers参数不生效,--workers通常是在不开启重载的情况下用于多进程并发处理,如uvicorn main:app --workers 4:
uvicorn main:app --workers 4(启动 4 个 worker 进程)
而--reload在开发时使用,如uvicorn main:app --reload,两者不能一起使用,因为重载模式本身就处理进程管理:
uvicorn main:app --reload(开启热重载)
热重载的实现逻辑是「主进程监测文件变化 → 重启子进程」,而多 worker 模式下会有多个子进程,热重载无法保证所有 worker 进程同步重启,易导致进程状态混乱、端口占用、代码加载不一致等问题!
在FastAPI开发环境
在开发环境,务必使用reload!,保证框架同步更新后的代码。
结合程序日志:Uvicorn 开启 --reload(热重载)后,检测到代码文件变化触发重启。
核心触发点:Uvicorn 的热重载监听器(WatchFiles)检测到 reload.py 文件被修改,开始执行重启流程:检测文件变化 → 触发重启 → 关闭旧进程(Shutting down)→ 清理应用资源(Waiting for shutdown)→ 旧进程终止 → 启动新进程 → 加载新代码 → 应用重新启动完成
WatchFiles 模块: Uvicorn 0.23+ 版本默认的文件监测模块,替代了之前的 watchdog,无需额外安装依赖,监测效率更高
2025-12-10 18:00:00.065 | INFO | logging:callHandlers:1762 - Application startup complete.
source /media/vdb/code/fastapi-demo/.venv/bin/activate
WARNING: WatchFiles detected changes in 'app/api/api_v1/endpoint/reload/reload.py'. Reloading...
2025-12-10 20:55:59.101 | INFO | logging:callHandlers:1762 - Shutting down
2025-12-10 20:55:59.206 | INFO | logging:callHandlers:1762 - Waiting for application shutdown.
2025-12-10 20:55:59.207 | INFO | logging:callHandlers:1762 - Application shutdown complete.
2025-12-10 20:55:59.207 | INFO | logging:callHandlers:1762 - Finished server process [11]
谢谢关注收藏
⏰ 刚刷到的朋友注意啦!点击【关注】锁定宝藏库,从此升职加薪不迷路 ✨
轻量云主机限时优惠
RackNerd
☁ 主机显示特惠:只要80元(3TB流量,1vcpu,50GB硬盘),且多区域IDC机房。
购买地址:https://my.racknerd.com/aff.php?aff=14942

CloudCone
CloudCone 特惠轻量云主机:购买地址:https://app.cloudcone.com/?ref=12332

📢 腾讯云资源限时福利
有云服务器、CDN、对象存储、网络防护等需求的朋友,欢迎联系下方腾讯云官方销售 👇 ✔️ 内部专属折扣,价格更优:

评论区