這里總結(jié)了4個(gè)比較好的python性能檢測(cè)工具,包括內(nèi)存使用、運(yùn)行時(shí)間、執(zhí)行次數(shù)等方面。
1、memory_profiler查看內(nèi)存的使用情況
memory_profiler可以用來(lái)測(cè)量python進(jìn)程的內(nèi)存使用情況??梢园葱胁榭磧?nèi)存的使用情況。
memory_profiler 是一個(gè)監(jiān)控進(jìn)程內(nèi)存消耗的模塊,可以逐行分析 Python 程序的內(nèi)存消耗。它是一個(gè)依賴(lài) psutil 模塊的純 Python 模塊。
只需要在目標(biāo)函數(shù)上加個(gè)裝飾器 @profile,就可以實(shí)現(xiàn)對(duì)此函數(shù)內(nèi)存使用的統(tǒng)計(jì)。
安裝:pip install -U memory_profiler
官方文檔:https://pypi.org/project/memory-profiler/
案例1,腳本如下:
from memory_profiler import profile
@profile
def base_func1():
for n in range(10000):
print(f'當(dāng)前n的值是:{n}')
base_func1()
# 從返回的數(shù)據(jù)結(jié)果來(lái)看,執(zhí)行當(dāng)前函數(shù)使用了45.3 MiB的內(nèi)存。返回結(jié)果如下:
# Line # Mem usage Increment Occurrences Line Contents
# =============================================================
# 28 45.3 MiB 45.3 MiB 1 @profile
# 29 def base_func():
# 30 45.3 MiB 0.0 MiB 10001 for n in range(10000):
# 31 45.3 MiB 0.0 MiB 10000 print('當(dāng)前n的值是:{}'.format(n))
案例2,腳本如下:
# -*- encoding: utf-8 -*-
from memory_profiler import profile
@profile
def my_func():
a = [1] * (10 ** 6)
b = [2] * (2 * 10 ** 7)
del b
return a
if __name__ == '__main__':
my_func()
執(zhí)行結(jié)果如下圖:
2、timeit 時(shí)間使用情況
timeit是python的內(nèi)置模塊,可以測(cè)試單元格的代碼運(yùn)行時(shí)間,由于是內(nèi)置模塊所以并不需要單獨(dú)安裝。
import timeit
def base_func2():
for n in range(10000):
print(f'當(dāng)前n的值是:{n}')
res = timeit.timeit(base_func2,number=5)
print(f'當(dāng)前的函數(shù)的運(yùn)行時(shí)間是:{res}')
# 執(zhí)行結(jié)果如下:
# 0.09903816704172641
3、line_profiler行代碼運(yùn)行時(shí)間檢測(cè)
官方文檔:https://pypi.org/project/line-profiler/
安裝:pip install line_profiler
from line_profiler import LineProfiler
def base_func3():
for n in range(10000):
print(f'當(dāng)前n的值是:{n}')
lp = LineProfiler()
lp_wrap = lp(base_func3)
lp_wrap()
lp.print_stats()
"""
執(zhí)行結(jié)果如下:(單位時(shí)間為微妙)
Line # Hits Time Per Hit % Time Line Contents
==============================================================
1 def base_func3():
2 10000 1538000.0 153.8 2.8 for n in range(10000):
3 10000 53417000.0 5341.7 97.2 print('當(dāng)前n的值是:{}'.format(n))"""
4、heartrate可視化檢測(cè)工具
heartrate最值得推薦的是可以在網(wǎng)頁(yè)上面向檢測(cè)心率一樣檢測(cè)程序的執(zhí)行過(guò)程,是非標(biāo)準(zhǔn)庫(kù),2019年11月停止更新。
文檔:https://www.cnpython.com/pypi/heartrate
安裝:pip install heartrate
。
使用案例:文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-429949.html
import heartrate
heartrate.trace(browser=True)
def base_func4():
for n in range(10000):
print(f'當(dāng)前n的值是:{n}')
執(zhí)行完會(huì)在瀏覽器上顯示:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-429949.html
到了這里,關(guān)于4個(gè)python內(nèi)存性能檢測(cè)工具:memory_profiler、timeit、line_profiler、heartrate的使用案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!