python 调试和性能分析

代码调试

代码调试的最简单的一个方法就是利用print()函数观察哪个地方打印出现问题,但这只适用于小型程序。因为你每次都得重新运行整个程序,或是一个完整的功能模块,才能看到打印出来的变量值。
而在其他情况下,我们可以使用如下几种方法
1、断点调试
在使用pycharm等编译器是,可以设置一个断点,然后再一行一行的运行来查找出问题所在
2、使用pdb调试
pdb调试也十分的简单,在代码中加入import pdb和pdb.set_trace()即可,当代码运行到pdb.set_trace()处时便会停止,这时我们在命令行中输入n为执行下一行,s为进入函数,l为查看上下文代码,p为打印,q为退出,更多操作可以通过python的源码来查看

性能分析

在日常工作中,我们可能会遇到这样的问题:产品的某个功能模块效率低下,延迟高,占用的资源多,但却不知道是哪里出了问题。
这时我们便可以通过cProfile中的run来进行性能分析,比如我们对如下一个函数进行分析

import cProfile

def fac(n):
	x = 0
	fac = 1
	while x<n:
	    x+= 1
	    fac*= x
	return fac
print(cProfile.run('fac(30)'))		

如上所示,便能打印出相关参数,其中
ncalls,是指相应代码 / 函数被调用的次数
tottime,是指对应代码 / 函数总共执行所需要的时间(注意,并不包括它调用的其他代码 / 函数的执行时间)
tottime percall,就是上述两者相除的结果,也就是tottime / ncalls
cumtime,则是指对应代码 / 函数总共执行所需要的时间,这里包括了它调用的其他代码 / 函数的执行时间
cumtime percall,则是 cumtime 和 ncalls 相除的平均结果。
这里需要注意的是,run()中的函数必须加引号,不然就会出现TypeError: exec() arg 1 must be a string, bytes or code object这样的报错

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值