python 統(tǒng)計代碼耗時的幾種方法分享
時間戳相減
在代碼執(zhí)行前后各記錄一個時間點,兩個時間戳相減即程序運(yùn)行耗時。
獲取時間戳time.time()
import time
start_time = time.time()
sum = 0
for i in range(100000000):
sum += i
print(sum)
end_time = time.time()
print("耗時: {:.2f}秒".format(end_time - start_time))
輸出:
4999999950000000
耗時: 10.53秒
獲取當(dāng)前日期 datetime.datetime.now()
import datetime
start_time = datetime.datetime.now()
sum = 0
for i in range(100000000):
sum += i
print(sum)
end_time = datetime.datetime.now()
print("耗時: {}秒".format(end_time - start_time))
裝飾器
裝飾器是一個裝飾函數(shù)的函數(shù),能夠在不改變函數(shù)源碼和函數(shù)調(diào)用方式的情況下給函數(shù)增加新的功能。很多時候統(tǒng)計函數(shù)的耗時,可以使用裝飾器實現(xiàn)。
import time
def get_time(f):
def inner(*arg,**kwarg):
s_time = time.time()
res = f(*arg,**kwarg)
e_time = time.time()
print('耗時:{}秒'.format(e_time - s_time))
return res
return inner
@get_time
def test():
time.sleep(2) # 模擬運(yùn)行2s
test()
輸出:
耗時:2.000781536102295秒
timeit模塊
timeit 模塊提供了測量 Python 小段代碼執(zhí)行時間的方法,可以在命令行界面直接使用,也可以通過導(dǎo)入模塊進(jìn)行調(diào)用。
語句執(zhí)行 number 次的時間
#導(dǎo)入timeit.timeit
from timeit import timeit
#看x=1的執(zhí)行一次的時間(number可以省略,缺省為1000000)
t1 = timeit('x=1', number=1)
print(t1)
#一個列表生成器的執(zhí)行時間,執(zhí)行10000次:
t2 = timeit('[i for i in range(100) if i%2==0]', number=10000)
print(t2)
輸出:
4.0000000001150227e-07
0.04841430000000002
計算函數(shù)的執(zhí)行時間
from timeit import timeit
def func(a):
sum = 0
for i in range(a):
sum += i
return sum
# timeit(函數(shù)名_字符串,運(yùn)行環(huán)境_字符串,number=運(yùn)行次數(shù))
t = timeit('func(10000000)', 'from __main__ import func', number=1)
print(t)
輸出:
0.4887406
重復(fù)調(diào)用 timeit()
repeat() 方法相當(dāng)于持續(xù)多次調(diào)用 timeit() 方法并將結(jié)果返回為一個列表。repeat 參數(shù)指定重復(fù)的次數(shù),number 參數(shù)傳遞給 timeit() 方法的 number 參數(shù)。
import timeit
def func(a):
sum = 0
for i in range(a):
sum += i
return sum
# timeit(函數(shù)名_字符串,運(yùn)行環(huán)境_字符串,number=運(yùn)行次數(shù),repeat=重復(fù)次數(shù),repeat=5)
t = timeit.repeat('func(100000)', 'from __main__ import func', number=100, repeat=5)
print(t)
cProfile性能分析工具
cProfile(語言編寫的測試模塊)是一個標(biāo)準(zhǔn)庫內(nèi)建的性能分析工具,可以在標(biāo)準(zhǔn)輸出中看到每一個函數(shù)被調(diào)用的次數(shù)和運(yùn)行的時間,從而找到程序的性能瓶頸,從而有針對性的進(jìn)行性能優(yōu)化。
Python代碼性能分析之cProfile
import cProfile
def func(a):
sum = 0
for i in range(a):
sum += i
return sum
if __name__ == '__main__':
cProfile.run("func(10000000)")

以上就是python 統(tǒng)計代碼耗時的幾種方法分享的詳細(xì)內(nèi)容,更多關(guān)于python 統(tǒng)計代碼耗時的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
在Django中自定義filter并在template中的使用詳解
這篇文章主要介紹了在Django中自定義filter并在template中的使用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05
python3中celery異步框架簡單使用+守護(hù)進(jìn)程方式啟動
這篇文章主要介紹了python3中celery異步框架簡單使用+守護(hù)進(jìn)程方式啟動,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01
接口自動化多層嵌套json數(shù)據(jù)處理代碼實例
這篇文章主要介紹了接口自動化多層嵌套json數(shù)據(jù)處理代碼實例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11
matplotlib繪制多子圖共享鼠標(biāo)光標(biāo)的方法示例
這篇文章主要介紹了matplotlib繪制多子圖共享鼠標(biāo)光標(biāo)的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

