共计 1232 个字符,预计需要花费 4 分钟才能阅读完成。
防止 vscode 近程调试 python 变卡的好习惯
准则:编程时与调试时,保障程序与配置文件是可能失常运行的最小化代码。程序性能最好可能合成开,独自调试。
具体场景一、想调试某个文件,在 launch.json 中,如果这个文件不须要在控制台接管参数,那么把配置中的 args 删除。因为应用 args 配置了参数,会导致程序加载了不必要配置,执行了非预期的逻辑。这些非预期的逻辑中,可能蕴含计算十分慢的代码。
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal",
"justMyCode": false,
"args": [],}
具体场景二、Python 导包,导入满足运行条件的最小的函数与类。
尽量应用 from xxx import yyy
来选择性导入须要用的包,间接应用 import xxx
,它会加载 xxx 中的所有 import 语句与全局执行的语句,这样,不晓得什么中央,会有一句代码,会影响到失常的调试,不不便定位谬误。
例子:入口脚本程序中引入了一个自定义的包,这个包中应用 pytorch 时,并且设置了如下的打印选项。
import torch
torch.set_printoptions(profile='full')
它会的十分的慢。实测在 NVIDIA GeForce RTX 2080 Ti,在 DEBUG CONSOLE
中打印一个这样的变量:[Tensor(shape=(663, 655), dtype=torch.bool), Tensor(shape=(663, 655), dtype=torch.bool)], 大略须要 18.23s。相当的慢。
如果调试的程序中,蕴含特地多的包,那么定位到引起调试代码,单步调试特地慢的起因,不是很容易。
卡顿状况定位经验总结
景象:程序中调用 mmdetection 推理的函数的代码,在 debug 过程中,单步执行一步特地慢,须要 20s 以上。
1 我狐疑与 mmdetection 推理的接口函数无关。那么,我独自整了 python 文件,外面编写 mmdetection 推理 demo 的最小化、最简略的代码。并 debug 这个 python 文件,发现 debug 很失常。没有问题。
2 我褪掉多余的代码封装,针对最里层的类,独自整了个测试 demo。对最里层的类,代码上,仅保留实现 mmdetection 推理、推理后后果打印,其它所有清空。并且 import 的包,仅保留不报错的起码类的包,其它导入的包全副删除。这样再做测试,发现在 debug 过程中,单步执行一步速度变失常了。
3 在上一步的根底上,每一次加一点代码块,并测试 debug 过程单步执行一步的速度。始终减少到会让程序变慢的那个代码块。对让程序变慢的代码块,能够再细粒度的从不会变慢的最小化代码版本上,缓缓减少代码,始终到减少到呈现让程序变慢的代码,即定位到了程序变慢的代码。