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

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

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

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

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

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

<code>>>>time.time()1517362540.347517/<code>

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

<code>>>>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)/<code>


time包中的功能都很實用:

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

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

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

<code>>>>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>/<code>

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

<code>>>> time.ctime()'Wed Jan 31 09:49:09 2018'/<code>

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

<code>>>> time.mktime(time.localtime())1517363569.0/<code>

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

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

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

<code>>>> 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)/<code>

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


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

定義一個函數run():

<code>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)/<code>
Python計算程序運行時間—time.time()、time.clock()

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

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

<code>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)/<code>
Python計算程序運行時間—time.time()、time.clock()

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

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

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

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

<code>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)/<code>

解果:

<code>>>> run3()CPU執行時間: 0.04683999999997468/<code>

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

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


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


分享到:


相關文章: