0

0

在VS Code中调试Python的多进程应用

P粉986688829

P粉986688829

发布时间:2025-12-05 20:54:07

|

187人浏览过

|

来源于php中文网

原创

VS Code调试Python多进程需手动启用子进程调试:在launch.json中设置"subProcess": true,并在子进程代码开头调用debugpy.listen()和debugpy.wait_for_client()。

在vs code中调试python的多进程应用

VS Code 调试 Python 多进程应用默认不支持子进程断点,因为 Python 的 multiprocessing 模块会启动全新解释器进程,而 VS Code 的调试器只附加到主进程。要让子进程也能被调试,关键在于让每个子进程都主动连接到 VS Code 的调试服务(ptvsd 或 debugpy)。

启用 debugpy 并配置 launch.json

新版 VS Code Python 扩展已弃用 ptvsd,统一使用 debugpy(随 python extension 自动安装)。确保你已在项目中安装了 debugpy:

pip install debugpy

然后在 .vscode/launch.json 中添加以下配置(重点是 "subProcess": true):

{ "version": "0.2.0", "configurations": [ { "name": "Python: Multi-Process", "type": "python", "request": "launch", "module": "your_main_module", // 或 "program": "./main.py" "console": "integratedTerminal", "justMyCode": true, "subProcess": true // ? 这是关键!允许调试子进程 } ] }

在子进程中手动触发调试器附加

仅靠 "subProcess": true 不够——它只对通过 multiprocessing.set_start_method("spawn") 启动、且子进程执行路径可被 VS Code 自动识别的场景有效。更可靠的方式是在子进程代码开头显式调用 debugpy.listen()debugpy.wait_for_client()

立即学习Python免费学习笔记(深入)”;

import debugpy

在子进程函数的最开始插入:

if name == "main":

避免重复监听(主进程不执行这段)

debugpy.listen(5678)  # 端口需与 launch.json 中一致(默认 5678)
print("Waiting for debugger attach...")
debugpy.wait_for_client()  # 阻塞直到 VS Code 附加
print("Debugger attached!")

后续你的业务逻辑...

def worker(): import debugpy debugpy.listen(5678) debugpy.wait_for_client()

✅ 此处打的断点现在可以命中

避免常见陷阱

端口冲突:多个子进程不能共用同一监听端口。若需并发调试多个子进程,可为每个分配不同端口(如 5679、5680),并在 launch.json 中配合 "debugPort" 动态指定(需脚本生成配置);更简单做法是只调试单个子进程,其余跳过调试逻辑。

伴江行购物商城系统
伴江行购物商城系统

傻瓜式的程序安装和调试,用户无需考虑系统的安装维护,美观、友好的展示铺面,设计中应用了多种网络安全技术,顾客可以方便的查询并订购商品,用户可以方便的定义各种商品信息,系统选用强大的数据库保存各类信息,系统支持多种浏览器,功能模块清晰实用强大,系统有着良好的扩充性和升级性,强大的在线支付系统和订单系统登陆地址/admin/login.asp后台登陆账号:admin密码:admin

下载

Windows + spawn 方法:Windows 默认用 spawn,必须保证子进程入口是 if __name__ == "__main__": 保护块,否则会无限递归创建进程。

fork 方法不生效:Linux/macOS 默认 fork,子进程继承主进程的调试状态,但 VS Code 无法自动接管 fork 出的子进程。此时仍需手动调用 debugpy.listen()

终端输出干扰:启用 "console": "integratedTerminal" 可看到子进程打印的 Waiting for debugger attach...,方便确认是否进入调试等待。

替代方案:用 attach 模式逐个调试

如果 launch 模式不稳定,可改用 attach 方式:

  • 先运行程序(不调试),子进程启动后打印出其 PID 和监听端口
  • 在 VS Code 中新增一个 attach 配置,指定对应 PID 或端口
  • 手动点击「Attach to Process」选择子进程,或用配置自动连接

这种方式更灵活,适合调试特定子进程,但自动化程度低。

基本上就这些。核心是理解:VS Code 不自动穿透 multiprocessing,得靠 debugpy 主动“暴露自己”并等待连接。配好 "subProcess": true + 子进程里加两行 debugpy 代码,90% 的多进程调试需求就能覆盖。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

772

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

664

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

765

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

699

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1405

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

570

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

579

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

751

2023.08.11

c++空格相关教程合集
c++空格相关教程合集

本专题整合了c++空格相关教程,阅读专题下面的文章了解更多详细内容。

0

2026.01.23

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 16.6万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号