防止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 torchtorch.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过程单步执行一步的速度。始终减少到会让程序变慢的那个代码块。对让程序变慢的代码块,能够再细粒度的从不会变慢的最小化代码版本上,缓缓减少代码,始终到减少到呈现让程序变慢的代码,即定位到了程序变慢的代码。