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 以及資源列表