电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

python如何做代碼性能分析

瀏覽:121日期:2022-06-21 09:39:40

上一篇文章我們介紹了基準測試,通過基準測試可以發現程序變慢了,那么是因為什么原因導致性能變慢的,需要進一步做代碼性能分析。python同樣提供了性能分析工具。

cProfile

cProfile是python默認的性能分析器,他只測量CPU時間,并不關心內存消耗和其他與內存相關聯的信息。

from time import sleepimport randomdef 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_listdef 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 arrif __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)

statement: 需要測試的代碼或者函數(函數名) fielname: 結果保存的位置, 默認為stdout sort: 結果排序方法,常用的有cumtime: 累積時間, name: 函數名, line: 行號

為了使結果統計出耗時部分,我們加了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} 6 function calls in 1.004 seconds 6個函數調用被監控,耗時1.004秒。 ncalls 函數被調用的次數。如果這一列有兩個值,就表示有遞歸調用,第二個值是原生調用次數,第一個值是總調用次數。 tottime 函數內部消耗的總時間。(可以幫助優化) percall 是tottime除以ncalls,一個函數每次調用平均消耗時間。 cumtime 之前所有子函數消費時間的累計和。 filename:lineno(function) 被分析函數所在文件名、行號、函數名。line_profiler

line_profiler 可以提供有關時間是如何在各行之間分配的信息,直白一點就是給出程序每行的耗時,在無法確定哪行語句最浪費時間,這很有用。

line_profiler是一個第三方模塊,需要安裝。

https://github.com/pyutils/line_profiler

from time import sleepimport randomdef 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@profiledef 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 arrif __name__ == ’__main__’: get_data_list = random_list(1, 99, 10) bubble_sort(get_data_list)

給需要監控的函數加上@profile 裝飾器。通過kernprof命令運行文件(安裝完line_profiler生成的命令)。

參數說明:

-l:以使用函數line_profiler -v:以立即將結果打印到屏幕

運行結果:

kernprof -l -v demo.pyWrote profile results to demo.py.lprofTimer unit: 1e-06 sTotal time: 1.00416 sFile: demo.pyFunction: bubble_sort at line 18Line # 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) 2611 15.0 1.4 0.0 for i in range(n): 2755 44.0 0.8 0.0 for j in range(0, n - i - 1): 2845 41.0 0.9 0.0 if arr[j] > arr[j + 1]: 2920 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列。

Line #:運行的代碼行號。 Hits:代碼行運行的次數。 Time:代碼行的執行時間,單位為微秒。 Per Hit:Time/Hits。 % Time:代碼行總執行時間所占的百分比。 Line Contents:代碼行的內容。

只需查看% Time列,就可清楚地知道時間都花在了什么地方。

總結

性能測試分析站在項目層面是一個很龐大的話題,以前為測試工程師,關注的是性能工具的使用,以及用戶維度的性能[1];作為開發工程師,每個功能都是由一個個函數/方法組成,我們去分析每個函數/方法,甚至是每行代碼的耗時,才能更好的進行代碼層面的性能優化。

以上就是python如何做代碼性能分析的詳細內容,更多關于python 代碼性能分析的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 超声波清洗机_大型超声波清洗机_工业超声波清洗设备-洁盟清洗设备 | 数显水浴恒温振荡器-分液漏斗萃取振荡器-常州市凯航仪器有限公司 | 广州云仓代发-昊哥云仓专业电商仓储托管外包代发货服务 | 长沙广告公司|长沙广告制作设计|长沙led灯箱招牌制作找望城湖南锦蓝广告装饰工程有限公司 | 异噻唑啉酮-均三嗪-三丹油-1227-中北杀菌剂厂家 | 深圳律师咨询_深圳律师事务所_华荣【免费在线法律咨询】网 | PU树脂_水性聚氨酯树脂_聚氨酯固化剂_聚氨酯树脂厂家_宝景化工 | 西门子气候补偿器,锅炉气候补偿器-陕西沃信机电工程有限公司 | 螺杆式冷水机-低温冷水机厂家-冷冻机-风冷式-水冷式冷水机-上海祝松机械有限公司 | 蓝牙音频分析仪-多功能-四通道-八通道音频分析仪-东莞市奥普新音频技术有限公司 | 机器视觉检测系统-视觉检测系统-机器视觉系统-ccd检测系统-视觉控制器-视控一体机 -海克易邦 | 二手电脑回收_二手打印机回收_二手复印机回_硒鼓墨盒回收-广州益美二手电脑回收公司 | 宿舍管理系统_智慧园区系统_房屋/房产管理系统_公寓管理系统 | 色谱柱-淋洗液罐-巴罗克试剂槽-巴氏吸管-5ml样品瓶-SBS液氮冻存管-上海希言科学仪器有限公司 | 台式恒温摇床价格_大容量恒温摇床厂家-上海量壹科学仪器有限公司 | 氢氧化钙设备_厂家-淄博工贸有限公司 | 带锯机|木工带锯机圆木推台锯|跑车带锯机|河北茂业机械制造有限公司| | 镀锌方管,无缝方管,伸缩套管,方矩管_山东重鑫致胜金属制品有限公司 | 恒温油槽-恒温水槽-低温恒温槽厂家-宁波科麦仪器有限公司 | 撕碎机_轮胎破碎机_粉碎机_回收生产线厂家_东莞华达机械有限公司 | 回转炉,外热式回转窑,回转窑炉-淄博圣元窑炉工程有限公司 | 细胞染色-流式双标-试剂盒免费代做-上海研谨生物科技有限公司 | 山东限矩型液力偶合器_液力耦合器易熔塞厂家-淄博市汇川源机械厂 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 全自动在线分板机_铣刀式在线分板机_曲线分板机_PCB分板机-东莞市亿协自动化设备有限公司 | 轴流风机-鼓风机-离心风机-散热风扇-罩极电机,生产厂家-首肯电子 | 亿立分板机_曲线_锯片式_走刀_在线式全自动_铣刀_在线V槽分板机-杭州亿协智能装备有限公司 | 中细软知识产权_专业知识产权解决方案提供商 | 万博士范文网-您身边的范文参考网站Vanbs.com | 搪玻璃冷凝器_厂家-越宏化工设备| 东莞办公家具厂家直销-美鑫【免费3D效果图】全国办公桌/会议桌定制 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 | 常州减速机_减速机厂家_常州市减速机厂有限公司 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 手机游戏_热门软件app下载_好玩的安卓游戏下载基地-吾爱下载站 | 集装袋吨袋生产厂家-噸袋廠傢-塑料编织袋-纸塑复合袋-二手吨袋-太空袋-曹县建烨包装 | 2025第九届世界无人机大会 | 动库网动库商城-体育用品专卖店:羽毛球,乒乓球拍,网球,户外装备,运动鞋,运动包,运动服饰专卖店-正品运动品网上商城动库商城网 - 动库商城 | 陕西华春网络科技股份有限公司 |