尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

uvicorn 进程残留问题

uvicorn 进程残留问题
📅 发布时间:2026/7/29 3:03:06

tags:

  • fastapi
  • python
  • windows
  • troubleshooting
  • uvicorn

商店版 Python 导致 uvicorn 进程残留问题分析

一、问题现象

在使用 Windows 商店版 Python(Microsoft Store 安装)开发 FastAPI 项目时,出现以下问题:

序号问题现象影响
1uvicorn main:app --reload启动后,按Ctrl+C无法停止服务无法正常退出开发服务器
2多个python.exe进程同时占用 8000 端口端口被占用,无法重新启动
3修改代码后自动重载失败,仍显示旧错误代码修改不生效
4taskkill /F /IM python.exe找不到进程无法通过进程名清理
5需使用taskkill /F /PID按 PID 逐个终止清理繁琐,容易遗漏

二、根本原因分析

2.1 商店版 Python 的特殊性

Windows 商店版 Python(MSIX 打包)与普通官方 Python 有本质区别:

对比项商店版 Python(MSIX)官方 Python
安装路径C:\Program Files\WindowsApps\...C:\Users\{用户}\AppData\Local\Programs\Python\...
运行机制应用沙箱(AppContainer)普通进程
进程隔离有额外的隔离层无
信号处理受限,Ctrl+C可能不传递正常
子进程管理行为异常,子进程易残留正常

2.2 uvicorn --reload 的进程模型

uvicorn --reload启动后会创建一个主进程(Reloader),由它派生**子进程(Server)**来运行 FastAPI 应用:

主进程(Reloader) 子进程(Server) ┌──────────────────┐ 启动 ┌──────────────────┐ │ 监控文件变化 │ ──────────────→ │ 运行 FastAPI 应用 │ │ 管理子进程生命周期 │ │ 处理 HTTP 请求 │ └──────────────────┘ └──────────────────┘
场景退出流程结果
官方 PythonCtrl+C→ 信号传递至主进程 → 主进程终止子进程 → 全部退出✅ 正常
商店版 PythonCtrl+C→ 信号被沙箱拦截 → 主进程未响应 → 子进程变成孤儿❌ 异常

2.3 问题链条

🏗️ 商店版 Python 沙箱
应用执行别名机制

🚫 信号处理受限
Ctrl+C 无法正常传递

⚠️ uvicorn --reload
主进程无法接收终止信号

👻 子进程 Server
脱离主进程管理

💀 子进程变为孤立进程
继续占用端口运行

🐛 python.exe 残留
8000 端口被占用

三、验证方法

3.1 检查 Python 来源

# 查看 Python 安装路径where.exe python# 检查虚拟环境指向typevenv\pyvenv.cfg

[!warning] 商店版 Python 的特征

  • 路径包含WindowsApps
  • pyvenv.cfg中的home指向C:\Program Files\WindowsApps\...

3.2 检查进程残留

# 查看端口占用netstat-ano|findstr 8000# 查看 Python 进程tasklist|findstr python

3.3 检查 Ctrl+C 是否有效

uvicorn main:app--reload# 按 Ctrl+C# 无效 → 商店版 Python ⚠️(问题存在)# 有效 → 官方 Python ✅(问题已解决)

四、解决方案

4.1 根本解决:卸载商店版,安装官方版

步骤 1:卸载商店版 Python

[!note] 两种方式可选:优先使用方式一(系统设置卸载);若卸载后python命令仍指向商店版,再用方式二(手动清理别名)。

方式一:通过系统设置卸载

  1. 按 Win + I 打开设置
  2. 左侧选择系统 → 右侧点击系统组件(或直接搜索"应用执行别名")
  3. 找到应用执行别名入口,点击进入
  4. 在列表中找到 python.exe 和 python3.exe(应用安装程序),关闭这两个开关

方式二:手动删除商店版 Python 别名

  1. 关闭所有终端窗口(含 VS Code 终端、PowerShell、PyCharm 等)
  2. 按Win + R,输入powershell,按Ctrl + Shift + Enter以管理员身份打开
  3. 执行以下命令(先终止进程再删除文件):
# 终止所有 Python 进程Stop-Process-Name python*-Force-ErrorAction SilentlyContinue# 删除商店版 Python 的执行别名$files= @("$env:LOCALAPPDATA\Microsoft\WindowsApps\python.exe","$env:LOCALAPPDATA\Microsoft\WindowsApps\python3.exe","$env:LOCALAPPDATA\Microsoft\WindowsApps\python3.13.exe","$env:LOCALAPPDATA\Microsoft\WindowsApps\pythonw.exe","$env:LOCALAPPDATA\Microsoft\WindowsApps\pythonw3.exe","$env:LOCALAPPDATA\Microsoft\WindowsApps\pythonw3.13.exe")foreach($fin$files){if(Test-Path$f){Remove-Item$f-ForceWrite-Host"已删除:$f"}}

步骤 2:安装官方 Python

# 访问 https://www.python.org/downloads/ 下载安装包# 安装时务必勾选 "Add Python to PATH"# 验证安装python--version python-c"import sys; print(sys.executable)"# 应显示:C:\Users\{用户名}\AppData\Local\Programs\Python\Python313\python.exe

步骤 3:重建虚拟环境

# 删除旧虚拟环境rmdir/s venv# 确认使用官方 Pythonwhere.exe python# 创建新虚拟环境python-m venv venv# 验证虚拟环境配置typevenv\pyvenv.cfg# home 应指向官方 Python 路径,而非 WindowsApps# 激活并安装依赖venv\Scripts\activate pip install-r requirements.txt

4.2 临时方案(不重装 Python)

[!tip] 如果暂时无法重装,可使用以下两种临时绕过方式

方法 1:不使用--reload

uvicorn main:app# 修改代码后手动重启

方法 2:更换 reload 引擎

uvicorn main:app--reload--reload-engine watchfiles

4.3 清理已残留的进程

# 查找占用 8000 端口的进程netstat-ano|findstr 8000# 按 PID 逐个终止(替换为实际 PID)taskkill/F/PID 18732 taskkill/F/PID 16424# 检查是否清理干净netstat-ano|findstr 8000

五、问题验证

5.1 虚拟环境提示符颜色

颜色含义
🟢 绿色(venv)✅ 虚拟环境正常,Python 来源健康
⚪ 白色(venv)⚠️ 虚拟环境可能有问题,需检查 Python 来源
🔴 红色(venv)❌ 虚拟环境异常,需重建

5.2 成功迁移的标志

# 1. where.exe python 显示 venv 在第 1 位D:\project\venv\Scripts\python.exe ← 第1位 ✅ C:\Users\...\Python313\python.exe ← 第2位# 2. pyvenv.cfg 中 home 指向官方 Pythonhome = C:\Users\{用户名}\AppData\Local\Programs\Python\Python313# 3. Ctrl+C 可以正常退出uvicorn main:app--reload# 按 Ctrl+C → 服务正常退出 ✅# 4. 端口不再残留netstat-ano|findstr 8000# 无输出 ✅

六、经验总结

6.1 根本原因

[!danger] 根本原因
Windows 商店版 Python(MSIX 打包)的沙箱/应用执行别名机制导致信号处理异常,使得uvicorn --reload派生的子进程无法被正常终止,从而产生python.exe进程残留和8000端口占用。

6.2 核心教训

  1. ❌不要使用 Windows 商店版 Python 进行开发
    └── 沙箱机制导致信号处理异常,Ctrl+C无效

  2. ✅使用官方 Python 安装包
    └── 正常的进程管理和信号处理

  3. ✅定期检查 Python 来源
    └──where.exe python确认不在WindowsApps下

  4. ✅绿色(venv)才是健康状态
    └── 提示符颜色是快速判断虚拟环境状态的指标

6.3 快速检查清单

  • where.exe python→ 第1位是venv/Scripts/python.exe
  • pyvenv.cfg→home指向官方 Python 路径(非WindowsApps)
  • python -c "import sys; print(sys.executable)"→ 显示 venv 路径
  • 虚拟环境提示符是绿色(venv)
  • uvicorn main:app --reload→Ctrl+C能正常退出
  • netstat -ano | findstr 8000→ 无进程占用

七、参考资料

  • Python 官方下载
  • Uvicorn 文档 - Reload
  • Windows MSIX 打包说明

相关新闻

  • 电动汽车与电网协同优化的双层调度策略及MATLAB实现
  • Unity与FMOD动态音频系统设计:自适应音乐与环境音参数化实战
  • DIY移动烧烤系统:从需求分析到模块化设计的完整实现方案

最新新闻

  • 字符串索引查找:多语言实现与避坑指南
  • Klipper双Z轴等高校准:解决3D打印第一层不平整的终极方案
  • 17天金融量化入门 - Day8
  • NMAP实战:运维工程师内网排查必备工具
  • 《大话文渊慧典》:外二篇-按次付费的云OCR有多坑?我用计算器按出了馆长的血压值
  • dvwa之weak session ids

日新闻

  • 金融舆情监测系统:多语言情感分析与实时可视化技术解析
  • QT C++调用Python异常处理:PyBind11实战与跨语言编程指南
  • A-47双麦回音消除模块:主次麦空间分布与差分连接对ENC性能的影响

周新闻

  • 大连理工大学与东京大学联手打造的“主动型AI助手“
  • 170.2026年国家级科研瓶颈:超精密单点金刚石切削(SPDT)光学表面生成
  • SongBloom:革命性歌曲生成框架深度解析——如何通过交织自回归与扩散模型创作完整音乐

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号