使用pdb和profile更好友的调试python程序性能

往常咱们测试程序,尤其是单个脚本及函数的性能,更多的是使用time.time() 来计算。 其实完全可以不要这样。 python语言有个Cprofile 库,是来分析所有过程的时间消耗的。 


import time
t = 0
def a():
    time.sleep(1)

def b():
    time.sleep(2)

def c():
    time.sleep(3)

for i in range(100):
    t += i

a()
b()
c()

下面可以很清晰的看到,各个步骤的及函数的消耗时间。 

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    6.006    6.006 <string>:1(<module>)
        1    0.000    0.000    6.006    6.006 c.py:1(<module>)
        1    0.000    0.000    1.000    1.000 c.py:3(a)
        1    0.000    0.000    2.002    2.002 c.py:6(b)
        1    0.000    0.000    3.003    3.003 c.py:9(c)
        1    0.000    0.000    6.006    6.006 {execfile}
        1    0.000    0.000    0.000    0.000 {method ‘disable’ of ‘_lsprof.Profiler’ objects}
        1    0.000    0.000    0.000    0.000 {range}
        3    6.005    2.002    6.005    2.002 {time.sleep}

还有一个是pdb,这个是用来一步步的调试程序用的,可以理解为IDE上面的逐步断点 。 


python pdb调试
python -m pdb myscript.py #注意这会重启myscript.py,这样启动的话,代码每一行都是一个节点
也可以在程序中这么设置断点:
import pdb; pdb.set_trace()
 
支持的命令:
    p 打印变量
    n next
    step 细点运行
    c continue
    l list
    a args 打印当前函数的参数
    condition bpnumber [condition]
    clear/disable/enable 清除/禁用/使能断点
    q quit
>断点设置  
   (Pdb)b  10 #断点设置在本py的第10行
   或(Pdb)b  ots.py:20 #断点设置到 ots.py第20行
   删除断点(Pdb)b #查看断点编号
            (Pdb)cl 2 #删除第2个断点
>运行
    (Pdb)n #单步运行
    (Pdb)s #细点运行 也就是会下到,方法
    (Pdb)c #跳到下个断点
>查看
    (Pdb)p param #查看当前 变量值
    (Pdb)l #查看运行到某处代码
    (Pdb)a #查看全部栈内变量


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注