亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術(shù)文章
文章詳情頁

python如何做代碼性能分析

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

上一篇文章我們介紹了基準(zhǔn)測試,通過基準(zhǔn)測試可以發(fā)現(xiàn)程序變慢了,那么是因?yàn)槭裁丛驅(qū)е滦阅茏兟模枰M(jìn)一步做代碼性能分析。python同樣提供了性能分析工具。

cProfile

cProfile是python默認(rèn)的性能分析器,他只測量CPU時(shí)間,并不關(guān)心內(nèi)存消耗和其他與內(nèi)存相關(guān)聯(lián)的信息。

from time import sleepimport randomdef random_list(start, end, length): ''' 生成隨機(jī)列表 :param start: 隨機(jī)開始數(shù) :param end: 隨機(jī)結(jié)束數(shù) :param length: 列表長度 ''' data_list = [] for i in range(length):data_list.append(random.randint(start, end)) return data_listdef bubble_sort(arr): ''' 冒泡排序: 對列表進(jìn)行排序 :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))

繼續(xù)使用上一篇文章中的例子,引用cProfile模塊,run()方法參數(shù)說明。

run(statement, filename=None, sort=-1)

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

為了使結(jié)果統(tǒng)計(jì)出耗時(shí)部分,我們加了sleep,結(jié)果如下:

❯ 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個(gè)函數(shù)調(diào)用被監(jiān)控,耗時(shí)1.004秒。 ncalls 函數(shù)被調(diào)用的次數(shù)。如果這一列有兩個(gè)值,就表示有遞歸調(diào)用,第二個(gè)值是原生調(diào)用次數(shù),第一個(gè)值是總調(diào)用次數(shù)。 tottime 函數(shù)內(nèi)部消耗的總時(shí)間。(可以幫助優(yōu)化) percall 是tottime除以ncalls,一個(gè)函數(shù)每次調(diào)用平均消耗時(shí)間。 cumtime 之前所有子函數(shù)消費(fèi)時(shí)間的累計(jì)和。 filename:lineno(function) 被分析函數(shù)所在文件名、行號、函數(shù)名。line_profiler

line_profiler 可以提供有關(guān)時(shí)間是如何在各行之間分配的信息,直白一點(diǎn)就是給出程序每行的耗時(shí),在無法確定哪行語句最浪費(fèi)時(shí)間,這很有用。

line_profiler是一個(gè)第三方模塊,需要安裝。

https://github.com/pyutils/line_profiler

from time import sleepimport randomdef random_list(start, end, length): ''' 生成隨機(jī)列表 :param start: 隨機(jī)開始數(shù) :param end: 隨機(jī)結(jié)束數(shù) :param length: 列表長度 ''' data_list = [] for i in range(length):data_list.append(random.randint(start, end)) return data_list@profiledef bubble_sort(arr): ''' 冒泡排序: 對列表進(jìn)行排序 :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)

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

參數(shù)說明:

-l:以使用函數(shù)line_profiler -v:以立即將結(jié)果打印到屏幕

運(yùn)行結(jié)果:

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 冒泡排序: 對列表進(jìn)行排序 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 #:運(yùn)行的代碼行號。 Hits:代碼行運(yùn)行的次數(shù)。 Time:代碼行的執(zhí)行時(shí)間,單位為微秒。 Per Hit:Time/Hits。 % Time:代碼行總執(zhí)行時(shí)間所占的百分比。 Line Contents:代碼行的內(nèi)容。

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

總結(jié)

性能測試分析站在項(xiàng)目層面是一個(gè)很龐大的話題,以前為測試工程師,關(guān)注的是性能工具的使用,以及用戶維度的性能[1];作為開發(fā)工程師,每個(gè)功能都是由一個(gè)個(gè)函數(shù)/方法組成,我們?nèi)シ治雒總€(gè)函數(shù)/方法,甚至是每行代碼的耗時(shí),才能更好的進(jìn)行代碼層面的性能優(yōu)化。

以上就是python如何做代碼性能分析的詳細(xì)內(nèi)容,更多關(guān)于python 代碼性能分析的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 久久午夜综合久久 | 欧美激情级毛片 | a毛片免费视频 | 亚欧在线视频 | 99久久精品国产自免费 | 自拍国内| 69xx在线观看视频 | 全免费午夜一级毛片真人 | 国内精品露脸在线视频播放 | 明星换脸高清一区二区 | 美女草| 日韩专区中文字幕 | 国产成年女人免费视频播放a | 特黄特色视频 | 日韩欧美综合在线二区三区 | 国产精品果冻麻豆精东天美 | 国产女同一区二区三区五区 | 五月激激激综合网色播免费 | 激情专区 | 一级毛片aaaaaa免费看 | 成人免费大片黄在线观看com | 草逼com| 欧美专区一区 | 国产片毛片 | 成 年 人 黄 片 大全 | 57pao一国产成视频永久免费 | 亚洲国产精品ⅴa在线观看 亚洲国产精品aaa一区 | 日韩精品在线观看视频 | 国产男女野战视频在线看 | 久久er这里只有精品 | 国产主播福利一区二区 | 午夜在线亚洲 | 国产成人免费高清激情视频 | 亚洲综合欧美色综合小说 | 大尺度做爰视频吃奶www | 国产欧美亚洲精品 | 天天射色综合 | 久久综合偷拍 | 国产亚洲人成网站在线观看不卡 | 日韩国产三级 | 国产 日韩 在线 亚洲 字幕 中文 |