Python是一個高層次的結合了解釋性、編譯性、互動性和面向對象的腳本語言,其具有高可擴展性和高可移植性,具有廣泛的標准庫,受到開發者的追捧,廣泛應用於開發運維(DevOps)、數據科學、網站開發和安全。然而,它沒有因速度和空間而贏得任何稱贊,主要原因是Python是一門動態類型語言,每一個簡單的操作都需要大量的指令才能完成。
所以這更加需要開發者在使用Python語言開發項目時協調好程序運行的時間和空間。
1、分析時間耗時
分析項目消耗的時間消耗,依托於line_profiler模塊,其可以計算出執行每行代碼所需占用的CPU時間。
第1步:安裝line_profiler模塊,我是用pip安裝一直失敗,所以下載到本地進行離線安裝,指令如下所示:
pip install .\line_profiler-3.0.2-cp37-cp37m-win_amd64.whl
安裝成功效果如下所示:

第2步:分析每行代碼的運行時間,本案例Demo檢測for循環一萬次累加和while循環一萬次累加的時間,並進行對比,實現代碼如下所示:
from line_profiler import LineProfiler
def operation1():
num=0
for i in range(10000):
num += 1
def operation2():
num=0
while(num < 10000):
num += 1
if __name__ == "__main__":
lprofiler = LineProfiler(operation1,operation2)
lprofiler.run('operation1()')
lprofiler.run('operation2()')
lprofiler.print_stats()
運行程序,可見while循環速度稍微慢一些,效果如下所示:

2、分析空間耗時
memory_profiler模塊可實現對Python項目中每一個代碼的內存消耗進行分析和監控。
第1步:安裝memory_profiler庫文件,指令如下所示:
pip install memory_profiler
安裝成功效果如下所示:

第2步:分析每行代碼的空間消耗,本案例Demo檢測for循環一萬次累加和while循環一萬次累加的消耗空間,並進行對比,實現代碼如下所示:
from memory_profiler import profile
@profile
def operation1():
num=0
for i in range(10000):
num += 1
@profile
def operation2():
num=0
while(num < 10000):
num += 1
if __name__ == "__main__":
operation1()
operation2()
由於是簡單運算消耗的內存是微乎其微的,效果如下所示:

本篇博文僅介紹以上兩種模塊,其實有更多有意思的模塊可以實現對程序的運行時間和空間消耗的監測,感興趣的朋友可以多多嘗試。
作者:華為雲特約供稿開發者 不脫發的程序猿
