性能分析之代碼運行時間計算——Python timeit 模塊 介紹

2019-09-13     軟體測試開發技術棧

通過修飾器實現函數運行時間的計算

在之前介紹Python修飾器的幾篇文章中,提到修飾器的一種應用場景——計算並列印代碼執行時間,如下 runtime 修飾器:

我們使用 runtime 修飾器,對需要關注執行時間函數進行修飾,如下


見 Timeit

Python 內置模塊 timeit 模塊與 time 模塊都可以實現對代碼運行時間的計算,但 timeit 模塊是專門用來測試代碼運行時間的,提供了更多靈活的計算方法,並且相對精度也會更高。

我們先來看一下,同樣計算一個函數的運行時間,使用 timeit 如何實現。

不難看出,timeit 還是比較靈活簡單的。接下來,我們深入的了解一下 timeit 模塊常用的兩個函數 。

timeit 函數

創建一個 Timer實例,返回運行 stmt 這段代碼 number 遍所用的時間,單位為秒。

語法

參數說明

  • stmt:用於傳入要測試時間的代碼,可以直接接受字符串的表達式,也可以接受單個變量,也可以接受函數。傳入函數時要把函數申明在當前文件中,然後在 stmt = 'func()' 執行函數,然後使用 setup = 'from main import func'。
  • setup:初始化代碼或構建環境的導入語句,比如 stmt中使用到的參數、變量,要導入的模塊等,多行語句的話,使用分號分隔,同時該語句不計入時間,一般是 from ... import ...
  • timer:計時函數,win32下是time.clock(),linux下是 time.time(),Python的標準庫手冊推薦在任何系統下都儘量使用 time.clock()
  • number:默認 100000,每一次測量中語句被執行的次數。

示例

執行上述代碼,輸出結果為:

如果我們只是想計算 com函數裡 sum([i 2 for i in rn]) 代碼的運行時間,我們可以直接使用 timeit.timeit 方法,上述代碼可以調整為:


repeat 函數

創建一個 Timer實例,通過repeat 參數指定重複測試的次數,返回包含每次測試的執行時間的列表,利用這一函數可以很方便得實現多次試驗取平均的方法。

語法

參數說明

  • stmt:用於傳入要測試時間的代碼,可以直接接受字符串的表達式,可以接受單個變量或者函數。傳入函數時要把函數申明在當前文件中,然後在 stmt = 'func()' 執行函數,然後使用 setup = 'from main import func'
  • setup:初始化代碼或構建環境的導入語句,比如 stmt中使用到的參數、變量,要導入的模塊等,多行語句的話,使用分號分隔,同時該語句不計入時間,一般是 from ... import ...
  • timer:計時函數,win32下是 time.clock(),linux下是 time.time(),Python的標準庫手冊推薦在任何系統下都儘量使用 time.clock()
  • repeat:默認3次,測試要重複幾次,每次的結果構成列表返回。
  • number:默認100000次,每一次測量中語句被執行的次數。

示例

執行上述代碼,輸出結果為:



文章來源: https://twgreatdaily.com/kqvqLm0BJleJMoPMh_Aq.html