在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Memray工具簡介及安裝與使用方法

Linux愛好者 ? 來源:開源前哨 ? 作者:南風草木香 ? 2022-06-15 13:17 ? 次閱讀

【導語】:Memray是一個可以檢查Python代碼內存分配情況的工具,我們可以使用它對Python解釋器或擴展模塊中的代碼進行分析,并生成多種統計報告,從而更直觀的看到代碼的內存分配。

簡介

開發者可以根據需要,生成多種統計報告,觀察程序的內存分配。

  1. 總結報告

該報告會把多個線程的內存分配情況顯示到同一個表格中,own memory表示每個函數占用的內存,total memory表示函數本身及其調用其他函數所占用的內存總量,allocation count表示暫時未釋放的內存個數。

0e9c0638-ec69-11ec-ba43-dac502259ad0.png

總結報告
  1. 火焰圖報告
該報告可以將內存分配數據可視化展示。火焰圖的第一層是占用內存的函數, 寬度越大,則占用的內存越多;每一層的函數都被其下一層的函數所調用,依次類推。
  • 示例代碼:
defa(n):
returnb(n)

defb(n):
return[c(n),d(n)]

defc(n):
return"a"*n

defd(n):
return"a"*n

a(100000)
  • 生成的火焰圖

0eb53ca2-ec69-11ec-ba43-dac502259ad0.png

火焰圖報告

由該圖可以看出,函數a調用了函數b,函數b調用了函數c和函數d。且第一層函數c和函數d所占的寬度相同,表示c和d占用的內存一樣。

  1. 表格報告

該報告以表格的形式展示程序的內存使用情況。Thread ID表示對應的線程,Size表示占用的內存總數,Allocator表示占用內存的函數,Location表示函數所在的位置。同時,還可以對每一列的數據進行排序。

0ec06370-ec69-11ec-ba43-dac502259ad0.png

表格報告
  1. 樹形報告

該報告可以清晰的顯示出程序的調用層次。樹形報告中根節點中的內存總量和所占百分比只是針對于圖中展示的數據,占用內存小的不在圖中。

0ed2f436-ec69-11ec-ba43-dac502259ad0.png

樹形報告
  1. 統計報告

該報告可以顯示程序內存使用情況的詳細信息,包括分配的內存總量、分配類型(例如MALLOC, CALLOC)等。

0ee43368-ec69-11ec-ba43-dac502259ad0.png

統計報告

項目地址

https://github.com/bloomberg/memray

安裝

目前只能在Linux平臺上使用Memray。由于Memray使用了C語言,發布的版本是二進制的,所以得先在系統上安裝二進制編譯工具。隨后在Python3.7+的環境下安裝Memray:

python3-mpipinstallmemray

如果你想安裝開發版本的Memray,首先要在系統上安裝二進制工具:libunwind 和liblz4,隨后克隆項目并運行如下命令進行安裝:

gitclonegit@github.com:bloomberg/memray.gitmemray
cdmemray
python3-mvenv../memray-env/#justanexample,putthiswhereveryouwant
source../memray-env/bin/activate
python3-mpipinstall--upgradepip
python3-mpipinstall-e.-rrequirements-test.txt-rrequirements-extra.txt

使用

  1. 基本使用

我們可以通過以下命令來追蹤python代碼的內存分配情況,my_script.py就是要分析的文件:

python3-mmemrayrunmy_script.py

也可以把memray當作命令行工具使用,例如:

memrayrunmy_script.py
memrayrun-mmy_module

以上命令會輸出一個二進制文件,隨后我們可以根據需要生成統計報告。假如我們想生成一個總結報告,那么可以運行如下命令:

memraysummarymy_script.bin

會生成程序內存分配的總結報告:

0e9c0638-ec69-11ec-ba43-dac502259ad0.png

總結報告

不同的報告形式在簡介部分都有展示,請讀者自行查看。

  1. 分析C/C++代碼的內存分配

當要使用Memray分析numpy或者pandas這種包含C代碼的模塊時,我們可以運行如下命令:

memrayrun--nativemy_script.py

從而直觀的看到Python代碼分配了多少內存,擴展模塊分配了多少內存。

假如我們在一個文件中使用了Numpy,當我們不使用--native時,生成的統計報告如下圖:

0f09c3a8-ec69-11ec-ba43-dac502259ad0.png

統計報告

從圖中可以看出在計算Numpy數組時分配了內存,但不清楚是Numpy還是Python解釋器分配了內存。通過使用--native命令,就可以得到一個更全面的報告,如圖所示:

0f1eed32-ec69-11ec-ba43-dac502259ad0.png

native報告

從圖中可以看到Numpy中C模塊的調用情況,當添加Numpy數組后,產生了內存分配。我們可以通過文件的后綴名區分Python模塊和C模塊。

  1. 在代碼運行時查看內存分配變化

Memray還支持動態查看Python代碼的內存分配情況,我們只需使用以下命令:

memrayrun--livemy_script.py

在這種模式下,開發者可以調試運行時間較長的代碼。下圖即為文件運行時的內存分配情況:

0f2c8e74-ec69-11ec-ba43-dac502259ad0.gif

Live模式
  1. 結果排序

統計報告中的結果通常是根據分配的總內存,從大到小依次排列。我們可以改變排序條件:

  • t (默認): 根據總內存排列
  • o: 根據每個函數占用的內存排列
  • a: 根據未釋放的內存個數進行排列
  1. 查看其他線程

使用live命令默認展示的是主線程的內存分配情況,我們可以通過左右箭頭切換到其他線程。

0f530bda-ec69-11ec-ba43-dac502259ad0.png

其他線程
  1. API

除了使用memray run查看Python代碼的內存分配,還可以在Python程序中使用memray。

importmemray

withmemray.Tracker("output_file.bin"):
print("Allocationswillbetrackeduntilthewithblockends")

更多細節可以查看相關API文檔[1]

后記

在我們平時編寫 Python 代碼的過程中,有時候只考慮到了業務功能的實現,而忽視了代碼的合理性與規范性,例如內存分配就是一個很重要的點,合理的內存分配有助于提升項目的運行速度。Memray 就是一個支持查看Python代碼內存分配的工具,它的便捷之處在于:我們可以根據需要,生成多種分析報告,從而直觀的了解到自己代碼的內存分配情況,避免發生內存泄露現象。

你寫 Python 代碼時關注過內存使用情況嗎?歡迎到評論中分享~

原文標題:8.5K Star! 檢查 Python 代碼內存分配的利器

文章出處:【微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

審核編輯:湯梓紅
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Linux
    +關注

    關注

    87

    文章

    11322

    瀏覽量

    209868
  • 代碼
    +關注

    關注

    30

    文章

    4803

    瀏覽量

    68754
  • python
    +關注

    關注

    56

    文章

    4800

    瀏覽量

    84821
  • 內存分配
    +關注

    關注

    0

    文章

    16

    瀏覽量

    8312

原文標題:8.5K Star! 檢查 Python 代碼內存分配的利器

文章出處:【微信號:LinuxHub,微信公眾號:Linux愛好者】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    Crawler:關于爬蟲的簡介安裝使用方法之詳細攻略

    Crawler:關于爬蟲的簡介安裝使用方法之詳細攻略
    發表于 12-19 16:58

    Py之cython:python庫之cython的簡介安裝使用方法之詳細攻略

    Py之cython:python庫之cython的簡介安裝使用方法之詳細攻略
    發表于 12-19 17:05

    Py之neurolab:Python庫之neurolab的簡介安裝使用方法之詳細攻略

    Py之neurolab:Python庫之neurolab的簡介安裝使用方法之詳細攻略
    發表于 12-20 10:36

    Py之pyserial:Python的pyserial庫的簡介安裝使用方法之詳細攻略

    Py之pyserial:Python的pyserial庫的簡介安裝使用方法之詳細攻略
    發表于 12-20 10:40

    Crawler之Scrapy:Scrapy簡介安裝使用方法之詳細攻略

    Crawler之Scrapy:Scrapy簡介安裝使用方法之詳細攻略
    發表于 12-21 10:43

    關于Anaconda簡介安裝使用方法的詳細攻略

    DL之Anaconda:關于Anaconda簡介安裝使用方法的詳細攻略
    發表于 12-24 11:42

    常見的圖片標注工具labelImg的簡介安裝使用方法

    labelImg:圖片標注工具之labelImg的簡介安裝使用方法詳細攻略
    發表于 12-25 10:26

    Python庫的twisted簡介安裝使用方法

    Py之twisted:Python庫之twisted簡介安裝使用方法等詳細攻略
    發表于 12-25 10:03

    Python庫的PyMySQL簡介安裝使用方法

    Py之PyMySQL:Python庫之PyMySQL的簡介安裝使用方法之詳細攻略
    發表于 12-26 10:40

    Python庫的Shutil簡介安裝使用方法

    Py之Shutil:Python庫之Shutil簡介安裝使用方法之詳細攻略
    發表于 12-27 16:46

    Python庫的Xlrd簡介安裝使用方法

    Py之Xlrd:Python庫之Xlrd簡介安裝使用方法之詳細攻略
    發表于 12-27 16:46

    Python庫的ipykernel簡介安裝使用方法

    Py之ipykernel:Python庫之ipykernel簡介安裝使用方法之詳細攻略
    發表于 12-27 16:47

    python庫之basemap安裝使用方法

    Py之basemap:python庫之basemap的簡介安裝使用方法之詳細攻略
    發表于 12-28 10:24

    lightgbm的簡介安裝使用方法

    Py之lightgbm:lightgbm的簡介安裝使用方法之詳細攻略
    發表于 06-01 08:42

    JSON工具簡介安裝使用方法說明

    JSON Hero 是一個簡單實用的 JSON 工具,通過簡介美觀的 UI 及增強的額外功能,使得閱讀和理解 JSON 文檔變得更容易、直觀。
    的頭像 發表于 05-25 12:40 ?4036次閱讀
    主站蜘蛛池模板: 欧美在线一级视频| 在线黄| 色噜噜狠狠色综合中文字幕| 在线观看s色| 久久夜色精品国产噜噜| 色狠狠综合网| 欧美精品成人久久网站| 色站视频| 网站色| 亚洲合集综合久久性色| 久久久久国产一级毛片高清板| 22eee在线播放成人免费视频| 好吊色37pao在线观看| 奇米视频7777| 手机在线免费观看视频| 天天色综合三| 一级网站在线观看| 天天插日日射| 手机福利在线| 超级乱淫小黄文小说| 大色综合色综合资源站| 国产午夜精品视频| 日日操免费视频| 天天综合色天天综合| 午夜视频入口| 五月天亚洲综合| 午夜小视频免费观看| 免费一级片在线| 黄黄网址| 永久免费av网站| 免费观看一区二区| 岛国毛片在线观看| 最新人妖shemaletube人妖| 免费看色视频| 特级淫片aaaa毛片aa视频| 天堂网视频在线| 四虎永久在线精品视频免费观看| 欧美在线你懂的| 丁香六月纪婷婷激情综合| 78摸在线| 深夜视频在线播放视频在线观看免费观看|