Python怎么定位性能瓶颈?python-profile

本网站用的阿里云ECS,推荐大家用。自己搞个学习研究也不错

上帝说:“选择了脚本,就不要考虑性能。”我是很支持这句话的,使用脚本要的就是开发速度、良好的扩展性以及可维护性。可惜到了最后,我们的程序难免会运行得太慢,我们的客户不能忍受,这时候,我们就不得不考虑对代码的性能进行优化了。

程序运行慢的原因有很多,比如存在太多的劣化代码(如在程序中存在大量的“.”操作符),但真正的原因往往是比较是一两段设计并不那么良好的不起眼的程序,比如对一序列元素进行自定义的类型转换等。因为程序性能影响是符合80/20法则的,即20%的代码的运行时间占用了80%的总运行时间(实际上,比例要夸张的多,通常是几十行代码占用了95%以上的运行时间),靠经验就很难找出造成性能瓶颈的代码了。这时候,我们需要一个工具——profile!最近我手上的项目也在一些关键的地方遇到了性能问题,那时已经接近项目完工日期,幸好因为平时的代码模块化程度比较高,所以通过profile分析相关的独立模块,基本上解决了性能问题。

对于大型的项目,对于脚本的性能肯定是需要提出很高的要求,那么如何去查看自己脚本运行的性能,python作为无比强大的语言当然也提供了类似性能查看的api-profile,首先必须确保已经安装了python-profile,安装过程:

1.打开linux下的终端;

2.输入:sudo apt-get install python-profile

 

安装好了,profile是python的标准库。可以统计程序里每一个函数的运行时间,并且提供了多样化的报表。使用profile来分析一个程序很简单,举例说如果有一个程序如下:

  1. def test():
  2.         a = 0
  3.         for i in xrange(1,100):
  4.                  a += 1
  5. import profile
  6. profile.run( “test()” )

如此大家可以查看一下结果,结果就是函数的运行时间和次数等信息,一下是我终端上打印的信息

  1. >>> profile.run(“test()”)
  2.          4 function calls in 0.004 CPU seconds
  3.    Ordered by: standard name
  4.    ncalls  tottime  percall  cumtime  percall filename:lineno(function)
  5.         1    0.004    0.004    0.004    0.004 :0(setprofile)
  6.         1    0.000    0.000    0.000    0.000 :1(test)
  7.         1    0.000    0.000    0.000    0.000 :1()
  8.         0    0.000             0.000          profile:0(profiler)
  9.         1    0.000    0.000    0.004    0.004 profile:0(test())
  1. 一下是针对上面个字段的解释:
  1. ncalls
  2. 函数的被调用次数
  1. tottime
  2. 函数总计运行时间,除去函数中调用的函数运行时间
  1. percall
  2. 函数运行一次的平均时间,等于tottime/ncalls
  1. cumtime
  2. 函数总计运行时间,含调用的函数运行时间
  1. percall
  2. 函数运行一次的平均时间,等于cumtime/ncalls
 回到python导读

未经允许不得转载:演道网 » Python怎么定位性能瓶颈?python-profile

赞 (0)
分享到:更多 ()

评论 0

评论前必须登录!

登陆 注册