利用4行Python代碼監(jiān)測每一行程序的運(yùn)行時間和空間消耗
Python是一個高層次的結(jié)合了解釋性、編譯性、互動性和面向?qū)ο蟮哪_本語言,其具有高可擴(kuò)展性和高可移植性,具有廣泛的標(biāo)準(zhǔn)庫,受到開發(fā)者的追捧,廣泛應(yīng)用于開發(fā)運(yùn)維(DevOps)、數(shù)據(jù)科學(xué)、網(wǎng)站開發(fā)和安全。然而,它沒有因速度和空間而贏得任何稱贊,主要原因是Python是一門動態(tài)類型語言,每一個簡單的操作都需要大量的指令才能完成。
所以這更加需要開發(fā)者在使用Python語言開發(fā)項(xiàng)目時協(xié)調(diào)好程序運(yùn)行的時間和空間。
1、分析時間耗時
分析項(xiàng)目消耗的時間消耗,依托于line_profiler模塊,其可以計(jì)算出執(zhí)行每行代碼所需占用的CPU時間。
第1步:安裝line_profiler模塊,我是用pip安裝一直失敗,所以下載到本地進(jìn)行離線安裝,指令如下所示:
pip install .\line_profiler-3.0.2-cp37-cp37m-win_amd64.whl
安裝成功效果如下所示:
第2步:分析每行代碼的運(yùn)行時間,本案例Demo檢測for循環(huán)一萬次累加和while循環(huán)一萬次累加的時間,并進(jìn)行對比,實(shí)現(xiàn)代碼如下所示:
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()
運(yùn)行程序,可見while循環(huán)速度稍微慢一些,效果如下所示:
2、分析空間耗時
memory_profiler模塊可實(shí)現(xiàn)對Python項(xiàng)目中每一個代碼的內(nèi)存消耗進(jìn)行分析和監(jiān)控。
第1步:安裝memory_profiler庫文件,指令如下所示:
pip install memory_profiler
安裝成功效果如下所示:
第2步:分析每行代碼的空間消耗,本案例Demo檢測for循環(huán)一萬次累加和while循環(huán)一萬次累加的消耗空間,并進(jìn)行對比,實(shí)現(xiàn)代碼如下所示:
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()
由于是簡單運(yùn)算消耗的內(nèi)存是微乎其微的,效果如下所示:
本篇博文僅介紹以上兩種模塊,其實(shí)有更多有意思的模塊可以實(shí)現(xiàn)對程序的運(yùn)行時間和空間消耗的監(jiān)測,感興趣的朋友可以多多嘗試。
到此這篇關(guān)于利用4行Python代碼監(jiān)測每一行程序的運(yùn)行時間和空間消耗的文章就介紹到這了,更多相關(guān)python 監(jiān)測程序運(yùn)行時間空間消耗內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談使用Python內(nèi)置函數(shù)getattr實(shí)現(xiàn)分發(fā)模式
這篇文章主要介紹了淺談使用Python內(nèi)置函數(shù)getattr實(shí)現(xiàn)分發(fā)模式,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下2018-01-01Django中的JWT身份驗(yàn)證的實(shí)現(xiàn)
這篇文章主要介紹了Django中的JWT身份驗(yàn)證的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-05-05聊聊pytorch測試的時候?yàn)楹我由蟤odel.eval()
這篇文章主要介紹了聊聊pytorch測試的時候?yàn)楹我由蟤odel.eval()的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05Python實(shí)現(xiàn)的序列化和反序列化二叉樹算法示例
這篇文章主要介紹了Python實(shí)現(xiàn)的序列化和反序列化二叉樹算法,結(jié)合實(shí)例形式分析了Python二叉樹的構(gòu)造、遍歷、序列化、反序列化等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03Python的Django中將文件上傳至七牛云存儲的代碼分享
七牛云存儲可以幫助服務(wù)器轉(zhuǎn)存圖片等數(shù)據(jù),類似于Dropbox等存儲服務(wù),這里就帶給大家Python的Django中將文件上傳至七牛云存儲的代碼分享,需要的朋友可以參考下2016-06-06node命令行服務(wù)器(http-server)和跨域的實(shí)現(xiàn)
本文主要介紹了node命令行服務(wù)器(http-server)和跨域的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02用Python實(shí)現(xiàn)數(shù)據(jù)篩選與匹配實(shí)例
大家好,本篇文章主要講的是用Python實(shí)現(xiàn)數(shù)據(jù)篩選與匹配實(shí)例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下2022-02-02