在計算機領域有多種時間。第一種稱作CPU時間或執行時間,用於測量在執行一個程序時CPU所花費的時間。第二種稱作掛鍾時間,測量執行一個程序時的總時間。掛鍾時間也被稱作流逝時間或運行時間。與CPU時間相比,掛鍾時間通常長些,因為CPU執行測量的程序可能同時還在執行其它程序的指令。
另一個重要概念是所謂的系統時間,由系統時鍾測量。系統時間表示計算機系統時間傳遞的概念。要記住系統時鍾是可以由操作系統修改的,就是修改系統時間。
Python的time模塊提供了各種與時間相關的函數。由於大部分函數調用同名的與平台相關的C庫函數,這些函數都是依賴於平台的。
time.time與time.clock
用於時間測量的兩個函數是time.time和time.clock。time以秒返回自新紀元以來的時間。對於任何操作系統都可以運行time.gmtime(0)查找此系統的新紀元。對於Unix,新紀元是1970年1月1日。對於Windows,新紀元是1601年1月1日。time.time通常用於檢測Windows上的程序。在Unix系統上,time.time的作用與Windows相同,但time.clock的意義不同。在Unix系統上,time.clock以秒為單位返回當前處理器時間,例如,執行當前線程所花費的CPU時間。而在Windows上,它是以秒為單位的返回自首次調用該函數以來所流逝的系統時間。
time.time與time.clock另一個不同之處是,如果在兩次調用之間將系統時鍾調回,則time.time可能會返回一個較小的值,而time.clock則返回的值未增長。
下面是在Unix系統上運行time.time和time.clock的例子:

time.time()顯示系統時間過去大概1秒,而time.clock()顯示花費在當前進程上的CPU時間沁於1毫秒。同時可以看到time.clock()的精度高於time.time()
下面是在Windows下,同樣的程序返回不一樣的結果:

time.time()和time.clock()顯示系統時間大致過去了1秒釧。與Unix不同,time.clock()不返回CPU時間,返回的是系統時間,且精度較高。
time.time()和time.clock()對於不同的系統有不同行為,那么在測量程序准確性能時應該使用哪一個呢?
這要視情況而定。如果程序運行的系統能夠提供足夠的資源給程序,例如,一個運行基於Python的web應用程序的web服務器,則使用time.clock()來測量程序會更有意義,因這個web應用程序可能是服務器上的主要程序。如果程序運行的系統上還同時運行着其它大量程序,則使用time.time()進行測量會更有意義。如果不是這樣,就應該使用基於掛鍾的計時器來測量程序的性能,因為這樣通常能反應程序的環境。
timeit模塊
處理不同平台上time.time()和time.clock()的不同行為通常容易出錯,Python的timeit模塊提供了一種處理時間的簡單方式。除了從代碼中直接調用,還可以從命令行調用它。
例如:
在基於Unix操作系統上

#在Windows上

在IDLE中

timeit使用了什么計時?從timeit源代碼可以看到,它使用了最好的計時器:

timeit另一個重要機制是在執行期間,它禁用了垃圾回收,如下所示:

如果啟用垃圾回收,測量程序性能會更精確,例如,當程序為大量對象分配資源和釋放資源時,就應該在其設置期間啟用它:

除了非常特殊的情況,一般應使用模塊timeit。此外還有一點要記住,測量一個程序的性能要考慮全面一些,因為在執行一個程序的時候不可能為它無限制地分配資源,在眾多循環中測量平均時間要好於在一次執行中測量一個時間。