python運行環境,python測試代碼運行時間_在Python中準確地測量代碼執行時間

 2023-11-30 阅读 38 评论 0

摘要:Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。 測量代碼執行時間是困難的。學習如何消除系統和隨機測量誤差,并獲得更可靠的結果。 我們經常需要測量代碼的特定部分執行需要多長時間。不幸的是,簡單地測量函數調用之前和之后的

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。

測量代碼執行時間是困難的。學習如何消除系統和隨機測量誤差,并獲得更可靠的結果。

我們經常需要測量代碼的特定部分執行需要多長時間。不幸的是,簡單地測量函數調用之前和之后的系統時間并不是很嚴謹,而且容易受到系統和隨機測量錯誤的影響。這對于測量非常短的間隔(< 100毫秒)來說尤其如此。

python運行環境,系統和隨機誤差

那么,下面這種測量方法有什么問題呢?

4c68e21eaf17450bac395db7c7c294bc.jpg

首先,這里會有一個系統誤差:通過調用time.perf_counter(), 一個未知量的時間會被加入到my_function()的執行時間中。多少時間呢?這取決于操作系統、特定的實現和其他不可控因素。

其次,還存在一個隨機誤差:對my_function()調用的執行時間在一定程度上會有變化。

python浪漫代碼、我們可以通過多次測量并取其平均值來抵抗隨機誤差。然而,消除系統誤差的難度要大得多。

直線擬合

卡洛斯·莫雷諾和塞巴斯蒂安·菲什邁斯特提出了一種新技術來減小這種系統性錯誤。基本思想是首先測量一個函數調用的時間,然后測量兩個函數調用的時間,然后測量三個函數調用的時間,依此類推。最終的方法可能是這樣的:

74b39e0bf7224e4c8d9c223648910827.jpg

然后你可以通過測量結果來擬合一條直線:

3672aea0218b4f8e9469237392a85cdb.png

python命令,總執行時間可以通過獲取該直線y = a x + b的斜率a得到。

在上面的例子中,直線是y = 205.91 x + 29.56;因此,執行時間等于205.91毫秒。

作者指出,這種測量方法對于偶爾會出現大誤差的測量是非常可靠的。這可以通過人為地改變第4次測量并重新運行直線擬合過程來視覺化:

3cda9239930e4d2e9da4f21d4bc9785f.png

盡管有一個值是完全偏離的,但我們得出的斜率(201.15)仍然非常接近之前的測量值。

python3、想要更多地了解這種方法的數學基礎知識,我邀請你閱讀這篇原創性論文:https://uwaterloo.ca/embedded-software-group/sites/ca.embedded-software-group/files/uploads/files/ieee-esl-precise-measurements.pdf

Python實現

你可以在我的公共GitLab倉庫中找到我對所展示算法的實現:https://gitlab.com/bernhard.knasmueller/accurate-time-measurements-python

這個算法和想法都要歸功于Moreno 和 Fischmeister。

python寫完了怎么運行,編輯于2020年1月18日:更正了perf_counter()的用法。

相關文章

如何將你的PHP代碼作為一個Composer包發布:https://knasmueller.net/how-to-publish-your-php-code-as-a-composer-package

你可以通過將你的庫作為一個composer貢獻給PHP社區來更容易地共享你的代碼…

python代碼可以直接運行嗎。PHP 7.3中的尾逗號:https://knasmueller.net/trailing-commas-in-php-7-3

隨著新的次要版本PHP 7.3的升級,函數調用中引入了尾逗號……英文原文:https://knasmueller.net/measure-code-execution-time-accurately-in-python

譯者:憂郁的紅秋褲

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://hbdhgg.com/1/186873.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 匯編語言學習筆記 Inc. 保留所有权利。

底部版权信息