久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

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

python如何進(jìn)行基準(zhǔn)測(cè)試

瀏覽:74日期:2022-06-21 09:49:17

基準(zhǔn)測(cè)試屬于性能測(cè)試的一種,用于評(píng)估和衡量軟件的性能指標(biāo)。我們可以在軟件開發(fā)的某個(gè)階段通過(guò)基準(zhǔn)測(cè)試建立一個(gè)已知的性能水平,稱為'基準(zhǔn)線'。當(dāng)系統(tǒng)的軟硬件環(huán)境發(fā)生變化之后再進(jìn)行一次基準(zhǔn)測(cè)試以確定那些變化對(duì)性能的影響。 這是基準(zhǔn)測(cè)試最常見的用途。

Donald Knuth在1974年出版的《Structured Programming with go to Statements》提到:

毫無(wú)疑問(wèn),對(duì)效率的片面追求會(huì)導(dǎo)致各種濫用。程序員會(huì)浪費(fèi)大量的時(shí)間在非關(guān)鍵程序的速度上,實(shí)際上這些嘗試提升效率的行為反倒可能產(chǎn)生很大的負(fù)面影響,特別是當(dāng)調(diào)試和維護(hù)的時(shí)候。我們不應(yīng)該過(guò)度糾結(jié)于細(xì)節(jié)的優(yōu)化,應(yīng)該說(shuō)約97%的場(chǎng)景:過(guò)早的優(yōu)化是萬(wàn)惡之源。當(dāng)然我們也不應(yīng)該放棄對(duì)那關(guān)鍵3%的優(yōu)化。一個(gè)好的程序員不會(huì)因?yàn)檫@個(gè)比例小就裹足不前,他們會(huì)明智地觀察和識(shí)別哪些是關(guān)鍵的代碼;但是僅當(dāng)關(guān)鍵代碼已經(jīng)被確認(rèn)的前提下才會(huì)進(jìn)行優(yōu)化。對(duì)于很多程序員來(lái)說(shuō),判斷哪部分是關(guān)鍵的性能瓶頸,是很容易犯經(jīng)驗(yàn)上的錯(cuò)誤的,因此一般應(yīng)該借助測(cè)量工具來(lái)證明。

雖然經(jīng)常被解讀為不需要關(guān)心性能,但是的少部分情況下(3%)應(yīng)該觀察和識(shí)別關(guān)鍵代碼并進(jìn)行優(yōu)化。

基準(zhǔn)(benchmarking)測(cè)試工具

python中提供了非常多的工具來(lái)進(jìn)行基準(zhǔn)測(cè)試。

為了使演示的例子稍微有趣,我們來(lái)隨機(jī)生成一個(gè)列表,并對(duì)列表中數(shù)字進(jìn)行排序。

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

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

❯ python .demo.py[8, 16, 22, 31, 42, 58, 66, 71, 73, 91]timeit

timeit是python自帶的模塊,用來(lái)進(jìn)行基準(zhǔn)測(cè)試非常方便。

if __name__ == ’__main__’: import timeit get_data_list = random_list(1, 99, 10) setup = 'from __main__ import bubble_sort' t = timeit.timeit(stmt='bubble_sort({})'.format(get_data_list),setup=setup) print(t)

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

❯ python .demo.py5.4201355

以測(cè)試bubble_sort()函數(shù)為例。timeit.timeit() 參數(shù)說(shuō)明。

stmt:需要測(cè)試的函數(shù)或語(yǔ)句,字符串形式. setup: 運(yùn)行的環(huán)境,本例子中表示if __name__ == ’__main__’:. number: 執(zhí)行的次數(shù),省缺則默認(rèn)是1000000次。所以你會(huì)看到運(yùn)行bubble_sort() 耗時(shí) 5秒多。 pyperf

https://github.com/psf/pyperf

pyperf 的用法與timeit比較類似,但它提供了更豐富結(jié)果。(注:我完全是發(fā)現(xiàn)了這個(gè)庫(kù)才學(xué)習(xí)基準(zhǔn)測(cè)試的)

if __name__ == ’__main__’: get_data_list = random_list(1, 99, 10) import pyperf setup = 'from __main__ import bubble_sort' runner = pyperf.Runner() runner.timeit(name='bubble sort', stmt='bubble_sort({})'.format(get_data_list), setup=setup)

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

❯ python .demo.py -o bench.json.....................bubble sort: Mean +- std dev: 5.63 us +- 0.31 us

測(cè)試結(jié)果會(huì)寫入bench.json 文件。可以使用pyperf stats命令分析測(cè)試結(jié)果。

❯ python -m pyperf stats bench.jsonTotal duration: 15.9 secStart date: 2021-04-02 00:17:18End date: 2021-04-02 00:17:36Raw value minimum: 162 msRaw value maximum: 210 msNumber of calibration run: 1Number of run with values: 20Total number of run: 21Number of warmup per run: 1Number of value per run: 3Loop iterations per value: 2^15Total number of values: 60Minimum: 4.94 usMedian +- MAD: 5.63 us +- 0.12 usMean +- std dev: 5.63 us +- 0.31 usMaximum: 6.41 us 0th percentile: 4.94 us (-12% of the mean) -- minimum 5th percentile: 5.10 us (-9% of the mean) 25th percentile: 5.52 us (-2% of the mean) -- Q1 50th percentile: 5.63 us (+0% of the mean) -- median 75th percentile: 5.81 us (+3% of the mean) -- Q3 95th percentile: 5.95 us (+6% of the mean)100th percentile: 6.41 us (+14% of the mean) -- maximumNumber of outlier (out of 5.07 us..6.25 us): 6pytest-benchmark

https://github.com/ionelmc/pytest-benchmark

pytest-benchmark是 pytest單元測(cè)試框架的一個(gè)插件。 單獨(dú)編寫單元測(cè)試用例:

from demo import bubble_sortdef test_bubble_sort(benchmark): test_list = [5, 2, 4, 1, 3] result = benchmark(bubble_sort, test_list) assert result == [1, 2, 3, 4, 5]

需要注意:

導(dǎo)入bubble_sort() 函數(shù)。 benchmark 作為鉤子函數(shù)使用,不需要導(dǎo)入包。前提是你需要安裝pytest和pytest-benchmark。 為了方便斷言,我們就把要排序的數(shù)固定下來(lái)了。

運(yùn)行測(cè)試用例:

❯ pytest -q .test_demo.py. [100%]------------------------------------------------ benchmark: 1 tests -----------------------------------------------Name (time in us)Min Max Mean StdDev Median IQR Outliers OPS (Kops/s) Rounds Iterations-------------------------------------------------------------------------------------------------------------------test_bubble_sort 1.6000 483.2000 1.7647 2.6667 1.7000 0.0000 174;36496 566.6715 181819 1-------------------------------------------------------------------------------------------------------------------Legend: Outliers: 1 Standard Deviation from Mean; 1.5 IQR (InterQuartile Range) from 1st Quartile and 3rd Quartile. OPS: Operations Per Second, computed as 1 / Mean1 passed in 1.98s

加上 --benchmark-histogram 參數(shù),你會(huì)得到一張圖表

❯ pytest -q .test_demo.py --benchmark-histogram.[100%]------------------------------------------------ benchmark: 1 tests -----------------------------------------------Name (time in us)Min Max Mean StdDev Median IQR Outliers OPS (Kops/s) Rounds Iterations-------------------------------------------------------------------------------------------------------------------test_bubble_sort 1.6000 53.9000 1.7333 0.3685 1.7000 0.0000 1640;37296 576.9264 178572 1-------------------------------------------------------------------------------------------------------------------Generated histogram: D:githubtest-circlearticlecodebenchmark_20210401_165958.svg

圖片如下:

python如何進(jìn)行基準(zhǔn)測(cè)試

關(guān)于基準(zhǔn)測(cè)試的工具還有很多,這里就不再介紹了。

經(jīng)過(guò)基準(zhǔn)測(cè)試發(fā)現(xiàn)程序變慢了,那么接下來(lái)需要做的就是代碼性能分析了,我下篇再來(lái)介紹。

以上就是python如何進(jìn)行基準(zhǔn)測(cè)試的詳細(xì)內(nèi)容,更多關(guān)于python 基準(zhǔn)測(cè)試的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日韩三级 | 国产毛片在线 | 亚洲国产精品99久久久久久久久 | 精品视频久久久 | 欧美99 | 欧美日韩国产综合在线 | 国产免费av一区二区三区 | 国产精品日日做人人爱 | 中文精品久久久 | 亚洲一区二区日韩 | 国产精品亚欧美一区二区 | 91久久爽久久爽爽久久片 | 国产伦精品一区二区三区四区视频 | 欧美成人a∨高清免费观看 在线视频成人 | 国产一区二区三区免费在线观看 | 日韩一二区 | 久久99精品久久久 | 国产一级视频在线播放 | 亚洲一区中文字幕在线观看 | 一区二区三| 国产精品女同一区二区久久夜 | 国产欧美一区二区 | 日韩91 | 国产精品第一国产精品 | 91精品国产高清久久久久久久久 | 久久成人精品 | 欧美五月婷婷 | 精品国产乱码久久久久久蜜柚 | 91精品国产综合久久久久久丝袜 | 午夜视频在线观看免费视频 | 在线亚洲人成电影网站色www | 国产激情偷乱视频一区二区三区 | 国产成人精品久久 | 国产一区二区三区在线 | 91久久综合| 日韩欧美一区二区三区视频 | 亚洲欧美国产一区二区三区 | 午夜电影在线看 | 精品一区二区三区三区 | 欧美日韩毛片 | 91精品久久 |