1. time.time()方法
返回自紀元以來的秒數作為浮點數,但是時期的具體日期和閏秒的處理取決於使用的平台。比如:在Windows和大多數Unix系統上,紀元是1970年1月1日00:00:00(UTC),並且閏秒不計入自紀元以來的秒數,這也通常被稱為Unix時間。我們要可以通過gmtime(0)查看自己平台上的紀元。
注意,即使時間總是作為浮點數返回,但並非所有系統都提供的精度高於1秒,而且更改系統的時間會影響time()的值。雖然此函數通常返回非遞減值,但如果在兩次調用之間設置了系統時鍾,則它可以返回比先前調用更低的值。
time()返回的數字可以轉換為更常見的時間格式(即年,月,日,小時等),方法是將其傳遞給gmtime()函數或在本地時間傳遞給本地時間( )功能。在這兩種情況下都返回struct_time對象,可以從該對象作為屬性訪問日歷日期的組件。
所以我們通常用time()來做時間的格式輸出,也會用在一些測試代碼時間上面。在我們測試代碼的時候需要調用兩次,做差值,注意它會把sleep()的時間也算進去。(具體場景有知道的小伙伴歡迎留言分享)
2. time.perf_counter()方法
返回性能計數器的值(以小數秒為單位)作為浮點數,即具有最高可用分辨率的時鍾,以測量短持續時間。 它確實包括睡眠期間經過的時間,並且是系統范圍的。
通常perf_counter()用在測試代碼時間上,具有最高的可用分辨率。不過因為返回值的參考點未定義,因此我們測試代碼的時候需要調用兩次,做差值。
perf_counter()會包含sleep()休眠時間,適用測量短持續時間
3. time.process_time()方法
返回當前進程的系統和用戶CPU時間總和的值(以小數秒為單位)作為浮點數。
通常time.process_time()也用在測試代碼時間上,根據定義,它在整個過程中。返回值的參考點未定義,因此我們測試代碼的時候需要調用兩次,做差值。
注意process_time()不包括sleep()休眠時間期間經過的時間。
4. 三者比較
除了time模塊,Python還提供了timeit模塊。timeit模塊提供了一種簡單的方法來計算一小段Python代碼,比如一些循環或者正則匹配。 timeit既有命令行界面,也有可調用界面。 避免了許多用於測量執行時間的常見陷阱。可以用於基准測試/分析目的的代碼塊。
具體的用法:更多用法可以查看timeit官方文檔
import timeit t = timeit.timeit('"-".join(str(n) for n in range(100))', number=10000) print(t)
time()精度上相對沒有那么高,而且受系統的影響,適合表示日期時間或者大程序程序的計時。
perf_counter()適合小一點的程序測試,會計算sleep()時間。
process_counter()適合小一點的程序測試,不會計算sleep()時間。
此外Python3.7開始還提供了以上三個方法精確到納秒的計時。分別是:
time.perf_counter_ns()
time.process_time_ns()
time.time_ns()
注意這三個精確到納秒的方法返回的是整數類型。
以前還有一個clock()方法,盡管現在這個方法還能用,但是這個方法在Python3.8中會被廢除掉了,所以這里就不過多介紹。
5 測試代碼
import time print('我是time()方法:{}'.format(time.time())) print('我是perf_counter()方法:{}'.format(time.perf_counter())) print('我是process_time()方法:{}'.format(time.process_time())) t0 = time.time() c0 = time.perf_counter() p0 = time.process_time() r = 0 for i in range(10000000): r += i time.sleep(2) print(r) t1 = time.time() c1 = time.perf_counter() p1 = time.process_time() spend1 = t1 - t0 spend2 = c1 - c0 spend3 = p1 - p0 print("time()方法用時:{}s".format(spend1)) print("perf_counter()用時:{}s".format(spend2)) print("process_time()用時:{}s".format(spend3)) print("測試完畢")
---------------------
作者:Jock2018
來源:CSDN
原文:https://blog.csdn.net/qq_27283619/article/details/89280974
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!