You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VSCode调试Flask主模块启动两次,求launch.json配置方案

解决VSCode调试Flask时重复启动子进程的问题

核心原因

Flask默认的debug=True会启用自动重载器(reloader),它会启动一个子进程运行实际应用;同时VSCode的debugpy调试器若配置不当,会和这个重载器冲突,导致两次启动触发端口占用错误。

正确的launch.json配置方案

直接替换原有配置为以下内容:

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Flask App",
            "type": "python",
            "request": "launch",
            "module": "flask",
            "env": {
                "FLASK_APP": "main.py",
                "FLASK_ENV": "development",
                "FLASK_DEBUG": "0"  // 关闭Flask自带重载器
            },
            "args": [
                "run",
                "--no-reload"  // 强制禁用重载,双重保险
            ],
            "jinja": true,
            "justMyCode": true,
            "stopOnEntry": false
        }
    ]
}

关键配置项说明

  • FLASK_DEBUG": "0":关闭Flask调试模式自带的重载功能,避免它启动子进程。
  • "--no-reload":作为Flask run命令的参数,强制禁用重载器,确保不会触发子进程启动。
  • 使用"module": "flask"而非program: "main.py":通过Flask CLI启动应用,符合官方调试流程,减少debugpy重复启动的概率。

额外注意事项

  • 如果代码里手动写了app.run(debug=True),必须改成app.run(debug=False),或者通过环境变量动态控制:
    if __name__ == "__main__":
        import os
        debug_mode = os.environ.get("FLASK_DEBUG", "0") == "1"
        app.run(debug=debug_mode)
    
  • 调试前杀掉所有残留的Python进程(包括之前启动的Flask实例),避免端口占用遗留问题。

内容的提问来源于stack exchange,提问作者PJT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 02:39:51