Geekerstar

Python性能分析工具Profile使用教程
Profile简介Profile是Python语言内置的性能分析工具,它能够有效地描述程序运行的性能状况,提供各种...
扫描右侧二维码阅读全文
12
2018/03

Python性能分析工具Profile使用教程

Profile简介

Profile是Python语言内置的性能分析工具,它能够有效地描述程序运行的性能状况,提供各种统计数据帮助程序员找出程序中的性能瓶颈。

使用案例

以下是一个就阶乘的小程序,Profile工具仅需要一行代码就可以对所测试函数进行代码性能测试

import profile


def profileTest():
    Total = 1
    for i in range(10):
        Total = Total * (i + 1)
        print(Total)
    return Total


if __name__ == "__main__":
    profile.run("profileTest()")

运行的结果如下图:

运行结果


ncalls  函数的被调用次数  
tottime  函数总计运行时间,这里除去函数中调用的其他函数运行时间  
percall  函数运行一次的平均时间,等于tottime/ncalls  
cumtime  函数总计运行时间,这里包含调用的其他函数运行时间  
percall  函数运行一次的平均时间,等于cumtime/ncalls  
filename:lineno(function) 函数所在的文件名,函数的行号,函数名
[/scode]

Pycharm里使用Profile

Pycharm直接内置了性能分析工具Profile,直接右键运行即可。

pycharm运行Profile

显示的结果如下:

pycharm运行结果1

pycharm运行结果2

Python代码性能优化

(1)改进算法,选择合适的数据结构

  • 良好的算法对性能起到关键作用,因此性能改进的首要点是对算法改进
  • 算法时间复杂性的排序依次是 O(1) --> O(lg n) --> O(n lg n) --> O(n^2) --> O(n^3) --> O(n^k) --> O(k^n) --> O(n!) 
  • 对成员的查找访问等操作,字典(dictionary)要比列表(list)更快
  • 集合(set)的并、交、差的操作比列表(list)的迭代要快

(2)循环优化的基本原则:尽量减少循环过程中的计算量,在多重循环的时候,尽量将内层的计算提到上一层。

(3)字符串的优化:Python的字符串对象是不可改变的。字符串连接的使用尽量使用join()而不是+。当对字符串可以使用正则表达式或者内置函数处理时,选择内置函数。

(4)使用列表解析和生成器表达式:列表解析要比在循环中重新构建一个新的list更为高效,因此可以利用这一特性来提高运行的效率。

总结

1.性能优化的关键是如何发现问题,寻找解决问题的方法。
2.有效的测试是不可缺少的,通过测试找出真正的瓶颈,并分析优化结果。
3.要避免不必要的优化,避免不成熟的优化,不成熟的优化是错误的来源。


如果您发现了文章有任何错误欢迎指正,有任何意见或建议,或者有疑问需要我提供帮助,也欢迎在下面留言,只需输入昵称+邮箱即可,网站或博客可选填。对于所有留言内容我会及时回复,非常期待与大家的交流![/scode]

版权声明:本文(除特殊标注外)为原创文章,版权归 Geekerstar 所有。

本文链接:http://www.geekerstar.com/backend/471.html

除了有特殊标注文章外欢迎转载,但请务必标明出处,格式如上,谢谢合作。

最后修改:2018 年 04 月 01 日 10 : 09 PM
如果觉得我的文章对你有用,请随意赞赏

发表评论