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

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

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

瀏覽:3日期: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 編程
相關文章:
主站蜘蛛池模板: 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 上海道勤塑化有限公司| 湖州织里童装_女童男童中大童装_款式多尺码全_织里儿童网【官网】-嘉兴嘉乐网络科技有限公司 | 窖井盖锯圆机_锯圆机金刚石锯片-无锡茂达金刚石有限公司 | 昆明网络公司|云南网络公司|昆明网站建设公司|昆明网页设计|云南网站制作|新媒体运营公司|APP开发|小程序研发|尽在昆明奥远科技有限公司 | vr安全体验馆|交通安全|工地安全|禁毒|消防|安全教育体验馆|安全体验教室-贝森德(深圳)科技 | 重庆监控_电子围栏设备安装公司_门禁停车场管理系统-劲浪科技公司 | 有源电力滤波装置-电力有源滤波器-低压穿排电流互感器|安科瑞 | 理化生实验室设备,吊装实验室设备,顶装实验室设备,实验室成套设备厂家,校园功能室设备,智慧书法教室方案 - 东莞市惠森教学设备有限公司 | 青岛代理记账_青岛李沧代理记账公司_青岛崂山代理记账一个月多少钱_青岛德辉财税事务所官网 | 天津货架厂_穿梭车货架_重型仓储货架_阁楼货架定制-天津钢力仓储货架生产厂家_天津钢力智能仓储装备 | 衬氟止回阀_衬氟闸阀_衬氟三通球阀_衬四氟阀门_衬氟阀门厂-浙江利尔多阀门有限公司 | 甲级防雷检测仪-乙级防雷检测仪厂家-上海胜绪电气有限公司 | 国际船舶网 - 船厂、船舶、造船、船舶设备、航运及海洋工程等相关行业综合信息平台 | 万博士范文网-您身边的范文参考网站Vanbs.com | 阴离子聚丙烯酰胺价格_PAM_高分子聚丙烯酰胺厂家-河南泰航净水材料有限公司 | 东莞市踏板石餐饮管理有限公司_正宗桂林米粉_正宗桂林米粉加盟_桂林米粉加盟费-东莞市棒子桂林米粉 | 三板富 | 专注于新三板的第一垂直服务平台 | 体坛网_体坛+_体坛周报新闻客户端 | 真空搅拌机-行星搅拌机-双行星动力混合机-广州市番禺区源创化工设备厂 | 不锈钢/气体/液体玻璃转子流量计(防腐,选型,规格)-常州天晟热工仪表有限公司【官网】 | 密度电子天平-内校-外校电子天平-沈阳龙腾电子有限公司 | 大型冰雕-景区冰雕展制作公司,3D创意设计源头厂家-[赛北冰雕] | 冰雕-冰雪世界-大型冰雕展制作公司-赛北冰雕官网 | 浇钢砖,流钢砖_厂家价低-淄博恒森耐火材料有限公司 | 橡胶电子拉力机-塑料-微电脑电子拉力试验机厂家-江苏天源 | 国产液相色谱仪-超高效液相色谱仪厂家-上海伍丰科学仪器有限公司 | 口臭的治疗方法,口臭怎么办,怎么除口臭,口臭的原因-口臭治疗网 | 篮球地板厂家_舞台木地板品牌_体育运动地板厂家_凯洁地板 | 单机除尘器 骨架-脉冲除尘器设备生产厂家-润天环保设备 | 工业洗衣机_工业洗涤设备_上海力净工业洗衣机厂家-洗涤设备首页 bkzzy在职研究生网 - 在职研究生招生信息咨询平台 | 蓄电池在线监测系统|SF6在线监控泄露报警系统-武汉中电通电力设备有限公司 | 广西教师资格网-广西教师资格证考试网 | 北京工业设计公司-产品外观设计-产品设计公司-千策良品工业设计 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | 中开泵,中开泵厂家,双吸中开泵-山东博二泵业有限公司 | 河南空气能热水器-洛阳空气能采暖-洛阳太阳能热水工程-洛阳润达高科空气能商行 | 淘剧影院_海量最新电视剧,免费高清电影随心观看 | 铣刨料沥青破碎机-沥青再生料设备-RAP热再生混合料破碎筛分设备 -江苏锡宝重工 | 臻知网大型互动问答社区-你的问题将在这里得到解答!-无锡据风网络科技有限公司 | 间甲酚,间甲酚厂家-山东祥东新材料 | 深圳市简易检测技术有限公司 |