色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

Python如何給你的程序做性能測試

瀏覽:5日期:2022-07-15 18:51:21

問題

你想測試你的程序運行所花費的時間并做性能測試。

解決方案

如果你只是簡單的想測試下你的程序整體花費的時間, 通常使用Unix時間函數就行了,比如:

bash % time python3 someprogram.pyreal 0m13.937suser 0m12.162ssys 0m0.098sbash %

如果你還需要一個程序各個細節的詳細報告,可以使用 cProfile 模塊:

bash % python3 -m cProfile someprogram.py 859647 function calls in 16.016 CPU seconds Ordered by: standard name ncalls tottime percall cumtime percall filename:lineno(function) 263169 0.080 0.000 0.080 0.000 someprogram.py:16(frange) 513 0.001 0.000 0.002 0.000 someprogram.py:30(generate_mandel) 262656 0.194 0.000 15.295 0.000 someprogram.py:32(<genexpr>) 1 0.036 0.036 16.077 16.077 someprogram.py:4(<module>) 262144 15.021 0.000 15.021 0.000 someprogram.py:4(in_mandelbrot) 1 0.000 0.000 0.000 0.000 os.py:746(urandom) 1 0.000 0.000 0.000 0.000 png.py:1056(_readable) 1 0.000 0.000 0.000 0.000 png.py:1073(Reader) 1 0.227 0.227 0.438 0.438 png.py:163(<module>) 512 0.010 0.000 0.010 0.000 png.py:200(group) ...bash %

不過通常情況是介于這兩個極端之間。比如你已經知道代碼運行時在少數幾個函數中花費了絕大部分時間。 對于這些函數的性能測試,可以使用一個簡單的裝飾器:

# timethis.pyimport timefrom functools import wrapsdef timethis(func): @wraps(func) def wrapper(*args, **kwargs): start = time.perf_counter() r = func(*args, **kwargs) end = time.perf_counter() print(’{}.{} : {}’.format(func.__module__, func.__name__, end - start)) return r return wrapper

要使用這個裝飾器,只需要將其放置在你要進行性能測試的函數定義前即可,比如:

>>> @timethis... def countdown(n):... while n > 0:... n -= 1...>>> countdown(10000000)__main__.countdown : 0.803001880645752>>>

要測試某個代碼塊運行時間,你可以定義一個上下文管理器,例如:

from contextlib import contextmanager@contextmanagerdef timeblock(label): start = time.perf_counter() try: yield finally: end = time.perf_counter() print(’{} : {}’.format(label, end - start))

下面是使用這個上下文管理器的例子:

>>> with timeblock(’counting’):... n = 10000000... while n > 0:... n -= 1...counting : 1.5551159381866455>>>

對于測試很小的代碼片段運行性能,使用 timeit 模塊會很方便,例如:

>>> from timeit import timeit>>> timeit(’math.sqrt(2)’, ’import math’)0.1432319980012835>>> timeit(’sqrt(2)’, ’from math import sqrt’)0.10836604500218527>>>

timeit 會執行第一個參數中語句100萬次并計算運行時間。 第二個參數是運行測試之前配置環境。如果你想改變循環執行次數, 可以像下面這樣設置 number 參數的值:

>>> timeit(’math.sqrt(2)’, ’import math’, number=10000000)1.434852126003534>>> timeit(’sqrt(2)’, ’from math import sqrt’, number=10000000)1.0270336690009572>>>

討論

當執行性能測試的時候,需要注意的是你獲取的結果都是近似值。 time.perf_counter() 函數會在給定平臺上獲取最高精度的計時值。 不過,它仍然還是基于時鐘時間,很多因素會影響到它的精確度,比如機器負載。 如果你對于執行時間更感興趣,使用 time.process_time() 來代替它。例如:

from functools import wrapsdef timethis(func): @wraps(func) def wrapper(*args, **kwargs): start = time.process_time() r = func(*args, **kwargs) end = time.process_time() print(’{}.{} : {}’.format(func.__module__, func.__name__, end - start)) return r return wrapper

最后,如果你想進行更深入的性能分析,那么你需要詳細閱讀 time 、timeit 和其他相關模塊的文檔。 這樣你可以理解和平臺相關的差異以及一些其他陷阱。 還可以參考13.13小節中相關的一個創建計時器類的例子。

以上就是Python如何給你的程序做性能測試的詳細內容,更多關于Python做性能測試的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 99久久免费看国产精品 | 中文字幕 亚洲精品 第1页 | 欧美另类视频videosbest18 | 成 人色 网 站 欧美大片在线观看 | 亚洲国产欧美一区二区欧美 | 国产夫妇精品自在线 | 久久国产精品免费看 | 国产男女免费视频 | 2022免费国产精品福利在线 | 国内精品一区二区在线观看 | 美女视频大全网站免费 | 国产www | 午夜爽视频 | a级毛片免费观看在线播放 a级毛片免费看 | 国产精品无码久久av | 亚洲第一区在线 | 欧美黄色高清 | 国产三级香港三韩国三级 | 久草视频免费在线观看 | 日本免费一区二区三区a区 日本免费一区二区三区看片 | 亚洲精品成人 | 三级网址免费 | 久久精品99精品免费观看 | 毛片大全免费 | 91日韩精品天海翼在线观看 | 欧美一区二区三区在线观看免费 | 日韩a级一片 | 自拍视频第一页 | 一级aaaaaa毛片免费同男同女 | a级片在线观看 | 成人男女18免费o | 九九精品免视频国产成人 | 国产精品久久一区二区三区 | 国产一级毛片视频 | 免费精品国产 | 91亚洲精品成人一区 | 亚洲综合视频在线观看 | 亚洲综合视频网 | 精品久 | 欧美a一级片 | 久久精品中文字幕首页 |