Python計算程序運行時間—time.time()、time.clock()

我們先來看一下python3中help(time):

關於time庫中表示時間的方法,官方給出了2種:

1.從1970-01-01 00:00:00 UTC,開始到現在所經歷的時間,以浮點數的秒來表示

>>>time.time()1517362540.347517

2.用結構化的時間組(year,month,day,hours,minutes,seconds....)來表示從1970-01-01 00:00:00 UTC,開始到現在所經歷的時間.

>>>time.gmtime()time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=1, tm_min=37, tm_sec=36, tm_wday=2, tm_yday=31, tm_isdst=0)

time包中的功能都很實用:

time.clock()返回程序運行的整個時間段中中CPU運行的時間,下面會重點介紹

time.sleep()爬蟲中常用,讓程序暫停執行指定的秒數,如time.sleep(2)

time.localtime()用結構化的時間組,表示本地時間

>>>time.localtime()time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=9, tm_min=46, tm_sec=7, tm_wday=2, tm_yday=31, tm_isdst=0)>>>type(time.localtime())<class time.struct_time>

time.ctime()用字元串string類型表示時間。

>>> time.ctime()Wed Jan 31 09:49:09 2018

time.mktime()將本地時間列錶轉化為浮點數的秒來表示

>>> time.mktime(time.localtime())1517363569.0

time.strftime()將時間組時間轉化為指定格式的String類

>>> time.strftime(%Y-%m-%d %H:%M:%S,time.localtime())2018-01-31 10:04:26

time.strptime()將String類時間轉化為時間組格式

>>> time.strptime(time.ctime())time.struct_time(tm_year=2018, tm_mon=1, tm_mday=31, tm_hour=10, tm_min=6, tm_sec=1, tm_wday=2, tm_yday=31, tm_isdst=-1)

time.tzset()更改本地時區(這個功能表示沒用過~)


現在我想用time來計算一下程序執行的時間:

定義一個函數run():

def run(): start = time.time() for i in range(1000): j = i * 2 for k in range(j): t = k print(t) end = time.time() print(程序執行時間: ,end - start)

可以看到,程序執行時間是5.73039174079895s。

現在,讓我們用time.clock()來看看程序執行過程中CPU執行了多長時間:

def run2(): start = time.clock() for i in range(1000): j = i * 2 for k in range(j): t = k print(t) end = time.clock() print(CPU執行時間: ,end - start)

可見,此段代碼CPU執行時間為:5.3150249999999915。

那麼問題來了,CPU真的執行了這麼長時間么?會不會有什麼東西是我沒考慮進去的呢?

仔細看一下,這段程序主要內容就是兩個for循環,for循環執行計算的時候CPU肯定是在運行的,那麼print()函數列印期間這個時間段的CPU執行時間有沒有算進去?

帶著疑問,我們進行第三次測試,此次我們去掉print(),直接讓CPU完成整個for循環的計算:

def run3(): start = time.clock() for i in range(1000): j = i * 2 for k in range(j): t = k end = time.clock() print(CPU執行時間: ,end - start)

解果:

>>> run3()CPU執行時間: 0.04683999999997468

可以看見,CPU的執行時間瞬間降低到0.04s,細想一下,其實不難理解。

因為去掉了print(),所以整個run3()函數就只剩下完整的for循環,CPU可以連續執行,(不必一遍for循環一邊print()來回切換),連續執行的CPU還是很快的~

所以,這給了我一個啟發,以後寫代碼時,要精簡不必要的開銷,譬如經常使用print()。。。


推薦閱讀:

Kivy中文編程指南:控制項
SQLAlchemy 的初步使用
如何學習Python 標準庫的問題
Scratch vs Python 以及資源列表

TAG:Python | Python入門 | 爬蟲計算機網路 |