當前位置:
首頁 > 知識 > Python代碼的性能優化:測試內存消耗

Python代碼的性能優化:測試內存消耗

Python代碼的性能優化:測試內存消耗

Python部落(python.freelycode.com)組織翻譯,禁止轉載,歡迎轉發。

在這篇文章中,我會介紹一些能在Python中幫助我們解決痛苦問題的工具,特別是當我們使用PyPy時的內存消耗問題。

為什麼我們第一個關心這個問題呢?為什麼我們不僅僅關心性能?這些問題的答案非常複雜,但我會總結出來。

PyPy是一個可選的Python解釋器,它具有比CPython更大的優勢:速度(通過它的JIT編譯器),兼容性(幾乎可以替代CPyton)和並發性(使用stackless和greenlets)。

PyPy有一個缺點,由於它的JIT和垃圾一樣的回收站實現,所以它通常會比CPython使用更多的內存。然而在某些情況下,它能夠比CPython消耗更少的內存。

接下來我們來看看如何測量你的程序使用了多少內存。

診斷內存的使用情況

memory_profiler

這是一個可以用於測量解釋器運行一個負載時使用的內存量的庫,名稱為memory_profiler。它可以通過pip安裝:

Python代碼的性能優化:測試內存消耗

並且需要安裝psutil依賴包:

Python代碼的性能優化:測試內存消耗

這個工具的優點是會在Python腳本中一行行的顯示內存的消耗。這有助於我們從腳本中找到可以重寫的地方,但這種分析帶來了一個缺點。你的代碼將比一般的腳本運行慢10到20倍。

怎麼使用它呢?你只需要將@profile添加到你需要測試的函數中就可以了。

讓我們看看它的運行吧!我們將使用我們之前文章中的素材腳本作為模型,稍微修改以刪除統計部分。它可以在GitHub上查看。

https://github.com/apatrascu/hunting-python-performance/blob/master/02.primes-v1.py

開始測試,需要使用以下PyPy命令:

Python代碼的性能優化:測試內存消耗

或者更簡短,通過直接在腳本中導入memory_profiler:

Python代碼的性能優化:測試內存消耗

執行這一行代碼之後,我們將看到PyPy得到如下的結果:

Python代碼的性能優化:測試內存消耗

我們可以看到這個腳本使用了24.371094MiB的RAM。讓我們分析一下,我們看到其中大多數是在構建數組時使用,這個數組排除了偶數,保存了所有其他的數值。

我們可以通過調用range函數來改善這一點,其使用一個增量參數。

如果再次測試,我們會看到如下結果:

Python代碼的性能優化:測試內存消耗

不錯,現在我們的內存消耗降到了22.75MiB。消耗可以通過使用列表解析(list comprehension)再次降低。

再次測試:

Python代碼的性能優化:測試內存消耗

我們腳本的最終版本僅消耗了22.451875MiB。這幾乎比第一個版本減少了10%。


英文原文:https://pythonfiles.wordpress.com/2017/05/18/hunting-python-performance-part-2/
譯者:南北丶

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python部落 的精彩文章:

在公司工作兩年以上的員工少賺一半的薪水
月考+Python在嵌入式系統中的崛起
用Python分析購物籃
榨乾 Python 代碼的性能——第一部分之環境設置
在Python中自定義類的創建方式

TAG:Python部落 |

您可能感興趣

使用 BenchmarkDotnet 測試代碼性能
性能測試loadrunner使用共性問題匯總
Olinya能量占卜小測試
性能測試loadrunner場景問題之HTTP
Python只適合測試?
Python錯誤、調試和測試
Facebook 測試Downvote負評功能,將進行小範圍內測
如何用 Python 測試 Android 應用
Raspberry Pi3 B+具有更快的CPU、Wi-Fi和更容易的兼容性測試
python下的測試利器pytest
教你在Python中用Scikit生成測試數據集
蘋果HomePod智能音箱測試:回答準確率遜於Google Home
花粉怒懟果粉:Mate 10 Pro和iPhone X挑戰低溫測試
Intel漏洞門性能影響深度測試:果然優化了過於流暢的Bug
Ansible Tower的安裝與基本功能測試
為何大量設計師用蘋果專屬ppt軟體Keynote做原型測試?
Crytek的多人射擊遊戲Hunt:Showdown關閉alpha測試
微軟正在iOS和Android上的Outlook中測試Cortana
整理-LinuxVPS 路由以及性能測試
測試精品 Suunto Spartan Sport Wrist HR Baro