Python測量時間,用time.time還是time.clock


在計算機領域有多種時間。第一種稱作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。此外還有一點要記住,測量一個程序的性能要考慮全面一些,因為在執行一個程序的時候不可能為它無限制地分配資源,在眾多循環中測量平均時間要好於在一次執行中測量一個時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM