time模塊的time方法、perf_counter方法和process_time方法的區別


 

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
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!


免責聲明!

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



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