Python 使用 monotonic 計算程式執行時間

本篇要介紹 python 如何使用 time.monotonic() 來測量準確的程式執行時間,monotonic 是一個單調時鐘,它回傳一個不會倒退的時間,是不會受到系統時間同步更新影響。

time.time() 是查看系統時鐘,因為使用者或系統服務可以更改系統時鐘,以至於在多台電腦之間同步時鐘,所以重複呼叫 time.time() 可能會生成前後轉換的數值。

例如,現在取得開始時間,之後取得結束時間時,剛好在這段期間電腦時鐘與網路時鐘同步,就會產生量測時間的不準確情形。

當使用 time.time() 測量持續時間進行計算時,可能導致量測不準確情形,這時可以使用 time.monotonic() 來避免這些情況,因為 time.monotonic() 它總是回傳前進的值。我自己是把它理解成開機時間到現在的時間。

使用範例

以下的範例簡單示範取得開始時間t1,之後取得結束時間t2,之後兩個時間相減再印出來。

1
2
3
4
5
6
7
8
9
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import time

t1 = time.monotonic()
time.sleep(0.1)
t2 = time.monotonic()
print('time elapsed: ' + str(round(t2-t1, 2)) + ' seconds')
print('time elapsed: ' + str(t2-t1) + ' seconds')

輸出:

1
2
time elapsed: 0.1 seconds
time elapsed: 0.10013350704684854 seconds

說明

Python 的 time.monotonic() 回傳的數值是浮點數,時間單位是秒。
另外還可以使用 time.monotonic_ns(),它回傳的是 nanoseconds 奈秒的 int 整數。
詳細可以參考 https://docs.python.org/3/library/time.html#time.monotonic

其它相關文章推薦
如果你想學習 Python 相關技術,可以參考看看下面的文章,
Python 新手入門教學懶人包
Python 讓程式 sleep 延遲暫停時間
Python str 字串用法與範例
Python list 串列用法與範例
Python set 集合用法與範例
Python dict 字典用法與範例
Python tuple 元組用法與範例
Python 字串分割 split
Python 取代字元或取代字串 replace