python中怎样对代码性能分析?这些工具要知道
Admin 2021-06-02 群英技术资讯 985 次浏览
python中怎样做代码性能分析?做代码性能分析能够帮我们了解什么原因导致性能变慢,因此大家学习python代码性能分析也是很有必要的。而python就有提供性能分析工具,下面我们就来具体看看。
cProfile是python默认的性能分析器,他只测量CPU时间,并不关心内存消耗和其他与内存相关联的信息。
from time import sleep import random def random_list(start, end, length): """ 生成随机列表 :param start: 随机开始数 :param end: 随机结束数 :param length: 列表长度 """ data_list = [] for i in range(length): data_list.append(random.randint(start, end)) return data_list def bubble_sort(arr): """ 冒泡排序: 对列表进行排序 :param arr 列表 """ n = len(arr) sleep(1) for i in range(n): for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr if __name__ == '__main__': get_data_list = random_list(1, 99, 10) import cProfile cProfile.run('bubble_sort({})'.format(get_data_list))
继续使用上一篇文章中的例子,引用cProfile模块,run()方法参数说明。
run(statement, filename=None, sort=-1)
为了使结果统计出耗时部分,我们加了sleep,结果如下:
python demo.py 6 function calls in 1.004 seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 1 0.000 0.000 1.004 1.004 <string>:1(<module>) 1 0.000 0.000 1.004 1.004 demo.py:19(bubble_sort) 1 0.000 0.000 1.004 1.004 {built-in method builtins.exec} 1 0.000 0.000 0.000 0.000 {built-in method builtins.len} 1 1.004 1.004 1.004 1.004 {built-in method time.sleep} 1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
line_profiler 可以提供有关时间是如何在各行之间分配的信息,直白一点就是给出程序每行的耗时,在无法确定哪行语句最浪费时间,这很有用。
line_profiler是一个第三方模块,需要安装。
https://github.com/pyutils/line_profiler
from time import sleep import random def random_list(start, end, length): """ 生成随机列表 :param start: 随机开始数 :param end: 随机结束数 :param length: 列表长度 """ data_list = [] for i in range(length): data_list.append(random.randint(start, end)) return data_list @profile def bubble_sort(arr): """ 冒泡排序: 对列表进行排序 :param arr 列表 """ n = len(arr) sleep(1) for i in range(n): for j in range(0, n - i - 1): if arr[j] > arr[j + 1]: arr[j], arr[j + 1] = arr[j + 1], arr[j] return arr if __name__ == '__main__': get_data_list = random_list(1, 99, 10) bubble_sort(get_data_list)
给需要监控的函数加上@profile
装饰器。通过kernprof
命令运行文件(安装完line_profiler生成的命令)。
参数说明:
运行结果:
kernprof -l -v demo.py Wrote profile results to demo.py.lprof Timer unit: 1e-06 s Total time: 1.00416 s File: demo.py Function: bubble_sort at line 18 Line # Hits Time Per Hit % Time Line Contents ============================================================== 18 @profile 19 def bubble_sort(arr): 20 """ 21 冒泡排序: 对列表进行排序 22 :param arr 列表 23 """ 24 1 8.0 8.0 0.0 n = len(arr) 25 1 1004030.0 1004030.0 100.0 sleep(1) 26 11 15.0 1.4 0.0 for i in range(n): 27 55 44.0 0.8 0.0 for j in range(0, n - i - 1): 28 45 41.0 0.9 0.0 if arr[j] > arr[j + 1]: 29 20 21.0 1.1 0.0 arr[j], arr[j + 1] = arr[j + 1], arr[j] 30 1 1.0 1.0 0.0 return arr
输出非常直观,分成了6列。
只需查看% Time列,就可清楚地知道时间都花在了什么地方。
性能测试分析站在项目层面是一个很庞大的话题,以前为测试工程师,关注的是性能工具的使用,以及用户维度的性能[1];作为开发工程师,每个功能都是由一个个函数/方法组成,我们去分析每个函数/方法,甚至是每行代码的耗时,才能更好的进行代码层面的性能优化。
以上就是python如何做代码性能分析的详细内容,更多关于python 代码性能分析的资料请关注脚本之家其它相关文章!
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
python集合怎样理解?集合是python中很基础的一个内容,这篇文章主要给大家分享的是集合的基本信息和集合的基本操作,有这方面学习需要的朋友可以参考。
这篇文章主要为大家详细介绍了python反转单链表算法题,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
python下如何往数据库批量插入数据?方法是什么?假如我们想要往数据库表中的插入的数据有几百上千条,那么一条条插入,则调用sql语句查询插入就需要执行几百上千,这样花费的时间就非常的长。因此我们可以使用cursor.executemany(sql,args)来实现批量插入数据,那么具体怎样做呢?接着往下看。
这篇文章介绍了 Python 列表和字典常踩坑即解决方案,主要针对python列表和字典得一些问题,提出了多种解决方案。需要的小伙伴可以参考一下
django是用Python开发的一个免费开源的web框架,能帮助我们快速搭建高性能的网站。这篇文章就给大家分享关于django的基础知识,主要介绍django上传文件的方式以及注意事项,下面我们一起来看看吧。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008