<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
任何程式語言開發的專案程式碼都是需要考慮記憶體問題的,有時候當專案體量比較龐大以後若是出現記憶體漏失等問題分析起來更是哦力不從心的。
因此,平時建議從開發的每個函數入手儘量編寫的標準、規範,不至於造成後期無法修復的BUG,這個python非標準模組memory_profiler值得一看。
使用memory_profiler能分析出每行程式碼塊的記憶體資源使用情況,有兩種方式可以參考,一種是開發完程式碼塊通過命令列的方式執行即可。
另一種則在直接程式碼塊時直接生成內r記憶體資源情況的紀錄檔可以隨時檢視。
使用python pip的方式安裝memory_profiler非標準庫,預設使用清華大學的python映象站。
pip install memory_profiler -i https://pypi.tuna.tsinghua.edu.cn/simple/
開發一個函數func_while,其中執行一個100萬次的迴圈並且在迴圈中列印每一次迴圈執行時的時間戳,將記憶體使用情況儲存到紀錄檔檔案memory.log中。
# Importing the timeit module. import timeit # A logging library. from loguru import logger # A decorator that will wrap the function and add some code to it. from memory_profiler import profile @profile(precision=4, stream=open("memory.log", "w+")) def func_while(): """ It prints the numbers from 0 to 999999. """ begin = timeit.default_timer() logger.info("開始迴圈應用:{0}".format(begin)) n = 0 while n < 1000000: logger.info('當前時間戳:{0}'.format(timeit.default_timer())) n = n + 1 end = timeit.default_timer() logger.info("結束迴圈應用:{0}".format(end)) logger.info('迴圈應用總共用時:{0}'.format(str(end - begin))) func_while() # 2022-09-17 22:18:18.767 | INFO | __main__:func_while:39 - 當前時間戳:1397.349649192 # 2022-09-17 22:18:18.769 | INFO | __main__:func_while:39 - 當前時間戳:1397.350927206 # 2022-09-17 22:18:18.770 | INFO | __main__:func_while:39 - 當前時間戳:1397.352256128 # 2022-09-17 22:18:18.771 | INFO | __main__:func_while:39 - 當前時間戳:1397.353639651 # 2022-09-17 22:18:18.773 | INFO | __main__:func_while:39 - 當前時間戳:1397.354919308 # 2022-09-17 22:18:18.774 | INFO | __main__:func_while:43 - 結束迴圈應用:1397.35619568 # 2022-09-17 22:18:18.775 | INFO | __main__:func_while:45 - 迴圈應用總共用時:1394.6941001149999
從上面的執行時間可以看出整個100萬次的迴圈整整跑了23分鐘才完成,本身電腦效能不是很好為了測試差點就宕機了。下面是memory.log記憶體分析的檔案中的部分截圖。
從結果可以發現在我的while迴圈這一行下面的程式碼塊整個記憶體顯示-65303MB左右,可以看出整個記憶體消耗出現非常大的問題,怪不得的應用的主執行緒直接就卡死了。
在上面的分析中,我們選用的記憶體統計的精度是保留四位小數,也就是@profile註解的precision屬性值的設定是4。
接下來使用第二種方式,也就是直接執行檢視效果,或者在命令列執行.py的python檔案效果是一樣的都會展示出記憶體的消耗情況,但是這種情況可能會出現記憶體精度缺失的情況。
為了保險起見,這次我還是直接選用1萬次迴圈來進行測試檢視效果,迴圈次數過多怕把我的操作機直接搞崩潰了!
@profile(precision=4) def func_while2(): """ It prints the numbers from 0 to 9999. """ begin = timeit.default_timer() logger.info("開始迴圈應用:{0}".format(begin)) n = 0 while n < 10000: logger.info('當前時間戳:{0}'.format(timeit.default_timer())) n = n + 1 end = timeit.default_timer() logger.info("結束迴圈應用:{0}".format(end)) logger.info('迴圈應用總共用時:{0}'.format(str(end - begin))) func_while2() # 2022-09-17 22:37:38.086 | INFO | __main__:func_while2:81 - 當前時間戳:15.020861643 # 2022-09-17 22:37:38.087 | INFO | __main__:func_while2:85 - 結束迴圈應用:15.022343696 # 2022-09-17 22:37:38.089 | INFO | __main__:func_while2:87 - 迴圈應用總共用時:12.908313867 # Filename: C:/the-public/the-public/test013/test7.py # # Line # Mem usage Increment Occurrences Line Contents # ============================================================= # 73 29.7266 MiB 29.7266 MiB 1 @profile(precision=4) # 74 def func_while2(): # 75 29.7266 MiB 0.0000 MiB 1 begin = timeit.default_timer() # 76 29.7422 MiB 0.0156 MiB 1 logger.info("開始迴圈應用:{0}".format(begin)) # 77 # 78 29.7422 MiB 0.0000 MiB 1 n = 0 # 79 # 80 29.8125 MiB 0.0000 MiB 10001 while n < 10000: # 81 29.8125 MiB 0.0703 MiB 10000 logger.info('當前時間戳:{0}'.format(timeit.default_timer())) # 82 29.8125 MiB 0.0000 MiB 10000 n = n + 1 # 83 # 84 29.8125 MiB 0.0000 MiB 1 end = timeit.default_timer() # 85 29.8125 MiB 0.0000 MiB 1 logger.info("結束迴圈應用:{0}".format(end)) # 86 # 87 29.8125 MiB 0.0000 MiB 1 logger.info('迴圈應用總共用時:{0}'.format(str(end - begin)))
顯然執行1萬次迴圈結果算是正常的,增量只有0.0703 MiB,只用了13秒就執行完成了,可能使用for迴圈的話效果還要好一些。
到此這篇關於Python利用memory_profiler實現記憶體分析的兩種方法總結的文章就介紹到這了,更多相關Python memory_profiler記憶體分析內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45