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

4.jpg

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

image
image

關于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()爬蟲中常用,讓程序暫停執(zhí)行指定的秒數,如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()更改本地時區(qū)(這個功能表示沒用過~)


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

定義一個函數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('程序執(zhí)行時間: ',end - start)
image

可以看到,程序執(zhí)行時間是5.73039174079895s。

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

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執(zhí)行時間: ',end - start)
image

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

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

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

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

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執(zhí)行時間: ',end - start)

結果:

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

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

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

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

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 寫在前面的話 代碼中的# > 表示的是輸出結果 輸入 使用input()函數 用法 注意input函數輸出的均是字...
    FlyingLittlePG閱讀 3,214評論 0 9
  • 常用模塊 認識模塊 什么是模塊 什么是模塊? 常見的場景:一個模塊就是一個包含了python定義和聲明的文件,文...
    go以恒閱讀 2,169評論 0 6
  • 線程 操作系統(tǒng)線程理論 線程概念的引入背景 進程 之前我們已經了解了操作系統(tǒng)中進程的概念,程序并不能單獨運行,只有...
    go以恒閱讀 1,795評論 0 6
  • 1. Python的hello-world: print ("Hello, Python!")、 完了 搖就完事兒...
    LunarShade閱讀 2,013評論 0 0
  • 1.進程 1.1多線程的引入 現實生活中 有很多的場景中的事情是同時進行的,比如開車的時候手和腳共同來駕駛汽車,再...
    TENG書閱讀 907評論 0 0

友情鏈接更多精彩內容