Python MemoryProfiler 模塊

我們都可能聽說過應用處理速度慢或執行速度慢,但我們有沒有試圖理解其背後的原因?應用花時間處理或執行我們的命令是有原因的,但是內存使用情況如何呢?系統的內存對於應用的處理和執行時間非常重要,但實際上沒有人談論它。執行或處理命令時使用了多少內存也會影響應用的執行速度。對我們來說,這可能聽起來很荒謬或微不足道,但它在我們的系統和安裝在其中的應用的性能中起著非常重要的作用。因此,與內存較多的應用相比,內存較少的應用執行時間較長是很常見的。

同樣的事情在執行程序時也適用,這就是為什麼在執行程序時查看使用了多少內存非常重要。這將幫助我們管理內存使用或以更好的方式設計程序,並記住內存使用。但是現在,一些問題會浮現在我們的腦海中,比如我們如何做到這一點,跟蹤程序的內存使用情況,或者找出程序的哪些功能使用了更多的內存,使其執行速度變慢?我們在 Python 中有一個內存分析模塊,它幫助我們跟蹤程序及其函數的內存使用情況。在本教程中,我們將學習 Python MemoryProfiler 模塊,我們將學習如何在執行程序時使用該模塊來跟蹤與分發一起使用的內存。

Python 內存剖析器模塊介紹

內存分析器是一個開源的 Python 模塊,它為我們提供了在程序執行時跟蹤程序內存消耗的功能,我們甚至可以通過程序中的逐行分析和程序的函數來監控內存消耗。MemoryProfiler 模塊還幫助我們分析 Python 的性能,以及其執行過程中內存消耗對性能和執行速度的影響。在這裡,我們將藉助示常式序討論 MemoryProfiler 模塊的安裝和實現,但首先,我們將了解該模塊的優勢和特性。

Python 內存剖析器模塊:優勢和特點

我們中的大多數人可能已經看到許多人抱怨 Python 與其他語言相比是一種緩慢的編程語言,執行一個程序或應用需要更多的時間。如果我們問他們使用什麼方法來計算執行速度,我們會得到的第一個答案是 Python 執行代碼或部分代碼或類似的東西所花費的總時間。但是我們會看到,他們都不會在執行代碼的特定部分時談論使用情況或使用了多少內存。關於程序的執行速度,這看起來似乎是非常無關緊要的信息,但實際上,這非常重要,它會影響 Python 執行程序的速度。因此,分析程序執行過程中的內存使用情況也同樣重要,因為 Python 的 MemoryProfiler 模塊,這成為可能。Python MemoryProfiler 模塊在監控和分析程序執行過程中的內存使用方面具有以下特點和優勢:

  • 這個模塊幫助我們跟蹤 Python 程序在執行過程中的內存使用情況,這樣我們就可以知道性能和速度背後的原因
  • 我們甚至可以在 MemoryProfiler 模塊的幫助下跟蹤程序特定部分的內存使用情況
  • 我們甚至可以在程序執行時逐行監控它對內存的消耗

這些是使用 MemoryProfiler 模塊的一些優點,它也有助於我們提高 Python 的性能。

Python 的 MemoryProfiler 模塊:安裝

Python 的 memory-profiler Module 並不是一個內置的模塊,這就是為什麼如果我們想要了解它的實現並在開發過程中使用它,我們必須在我們的系統中安裝這個模塊,或者確保這個模塊在我們的系統中正確安裝。如果內存分析器不在我們的系統中,我們可以通過各種方法安裝它,但是我們可以選擇的最簡單的方法是通過 pip 安裝程序安裝它。因此,在本安裝部分,我們將使用以下命令通過 pip 安裝程序安裝 MemoryProfiler 模塊:


pip install memory-profiler

首先,我們必須在命令提示符終端 Shell 中寫入上面給出的命令,然後,我們必須按「enter」鍵開始安裝過程。一旦安裝過程開始,將需要一些時間,我們必須等到它成功安裝到我們的系統中。

正如我們所看到的,內存分析器已經成功地安裝在我們的系統中,現在我們可以進一步實現它,我們甚至可以將這個模塊用於開發目的。

注意:在本教程的實現部分,我們將在一個示常式序中使用帶有 MemoryProfiler 模塊的requests模塊,以了解通過 MemoryProfiler 模塊進行內存跟蹤和分析的實際實現和使用。因此,在我們繼續執行實現部分之前,我們應該確保requests模塊存在於我們的系統中,如果它不存在於我們的系統中,我們可以使用終端中的以下 pip 命令從 pip 安裝程序安裝它:


pip install requests

正如我們所看到的,requests模塊已經存在於我們的系統中,這就是為什麼一個已經滿足的需求消息會顯示給我們。

Python 的 MemoryProfiler 模塊:實現

我們將在這裡使用兩個例子來理解 MemoryProfiler 模塊的實現,當結果顯示在輸出中時,我們將分析程序中的內存使用情況。讓我們看一下下面兩個示常式序,以了解 MemoryProfiler 模塊的實現:

實現 1:從默認函數分析內存使用情況:

在這個實現部分,我們將在示常式序中創建一個默認函數,並在其中定義一些變數,之後,我們將對這些變數執行一些操作。然後,當結果顯示在輸出中時,我們將分析程序每行的內存使用情況。讓我們看下面的示常式序來理解 MemoryProfiler 模塊的這個實現部分。

例 1:


# Importing memory-profiler module in the program
from memory_profiler import profile
# Profile Decorator class
@profile
# A default function to check memory usage
def defFunc():
    # Some random variables
    var1 = [1] * (6 ** 4)
    var2 = [1] * (2 ** 3)
    var3 = [2] * (4 * 6 ** 3)
    # Operations on variable
    del var3
    del var1
    return var2
if __name__ == '__main__':
    # Calling default function
    defFunc()
# Print confirmation message
print("We have successfully inspected memory usage from the default function!")

輸出:

Filename: C:\Users\Manish\memoryexample.py

Line #    Mem usage    Increment    Occurences    Line Contents
============================================================
  4      40.2 MiB      40.2 MiB     1            @profile
  5                                              # a default function to check memory usage
  6                                                  def defFunc():
  7                                              # Some random variables
  8      40.2 MiB      0.0 MiB      1            var1 = [1] * (6 ** 4)
  9      40.2 MiB      0.0 MiB      1            var2 = [1] * (2 ** 3)
  10     40.2 MiB      0.0 MiB      1            var3 = [2] * (4 * 6 ** 3)
  11                                             # Operations on variable
  12     40.2 MiB      0.0 MiB      1            del var3
  13     40.2 MiB      0.0 MiB      1            del var1
  14     40.2 MiB      0.0 MiB      1            return var2
We have successfully inspected memory usage from the default functi

正如我們所看到的,程序每一行的內存使用情況都顯示在最後一行的確認語句中。

說明:

我們首先從程序中的內存剖析器模塊導入了概要文件裝飾器類。之後,我們使用了概要文件裝飾器,然後定義了一個名為「defFunc」的默認函數在這個默認函數中,我們定義了三個變數,然後刪除了第一個和第三個變數,並從函數中返回第二個變數。然後,我們調用了默認函數,之後,我們使用了像確認消息這樣的列印語句。

在上面示例的輸出中,我們可以看到多個列,這些列表示下面定義的多個屬性:

  1. 行號:此列表示顯示內存使用情況的程序的行號
  2. 內存使用:此列表示在整個執行過程中,直到特定代碼行為止所使用的內存或 RAM
  3. 增量:此列顯示當前行內存使用與前一行代碼相比的差異,或者我們可以看到它基本顯示
  4. 出現次數:該行顯示針對該特定行號的行代碼執行的次數
  5. 行內容:它表示在該特定行中編寫的 Python 代碼

因此,這就是我們如何理解 Python 程序甚至程序中特定行的內存使用分析,以便我們知道這個函數或代碼行是如何影響性能和執行時間的。

實現 2:分析執行過程中的內存使用情況:

這個實現部分將涵蓋 MemoryProfiler 模塊的實際實現,用於監控和分析 Python 程序的內存使用情況。在這個實現部分,首先,我們將創建一個 Python 文件,其中包含以下示常式序:

例 2:


# Import memory_profiler module
from memory_profiler import profile
# Importing request module in the program
import requests
# Creating a base extractor class
class baseExtr:
    # Using profile decorator for monitoring memory usage
    @profile
    # Default function for parsing words from list
    def parseList(self, array):
        # Creating a file type object in the system
        sampleFile = open('wordParsing.txt', 'w')
        # Looping over the file with for loop
        for parsedWords in array:
            # Writing words in the example file
            sampleFile.writelines(parsedWords)
    @profile
    # Another default function for fetching URL
    def parseURL(self, url):
        # Fetching response from the file
        response = requests.get(url).text
        with open('url.txt', 'w') as sampleFile:
            # Writing fetched responses in the example file
            sampleFile.writelines(response)

寫完上面給出的程序後,我們將保存名稱為【內存示例】的文件,現在我們將創建另一個文件,我們將在其中導入該文件並在其中編寫以下 Python 程序:


# Import baseExtr class from memoryexample file
from memoryexample import baseExtr
if __name__ == "__main__":
    # Git URL for importing word list
    url = 'https://raw.githubusercontent.com/dwyl/english-words/master/words.txt'
    # Array for word from text file 
    array = ['five', 'four', 'three', 'two', 'one']
    # Initializing Extractor object from baseExtr() class
    wordExtract = baseExtr()
    # Calling parseURL() function from baseExtr class
    wordExtract.parseURL(url)
    # Calling out pasreList() function
    wordExtract.parseList(array)

現在,我們已經完成了程序編寫部分,當我們運行第二個文件時,我們將看到以下輸出:

Filename: C:\Users\Manish\memoryexample.py

Line #    Mem usage    Increment    Occurences    Line Contents
============================================================
  17     44.6 MiB     44.6 MiB           1      @profile
  18                                            def parseURL(self, url):
  19                                            # fetches the response
  20     51.9 MiB      7.3 MiB           1      response = requests.get(url).text
  21     51.9 MiB      0.0 MiB           1      with open('url.txt', 'w') as sampleFile:
  22                                                    
  23                                            # writing response to file
  24     52.5 MiB      0.6 MiB           1      sampleFile.writelines(response)

Filename: C:\Users\Manish\memoryexample.py

Line #    Mem usage    Increment    Occurences    Line Contents
============================================================
  8      47.9 MiB      47.9 MiB       1          @profile
  9                                            # Default function for parsing words from list
  10                                             def parseList(self, array):
  11                                           # Creating a file type object
  12     47.9 MiB      0.0 MiB       1           sampleFile = open('wordParsing.txt', 'w')
  13                                           # looping over the file
  14     47.9 MiB      0.0 MiB       6           for parsedWords in array:
  15                                           # Writing words in the example file
  16     47.9 MiB      0.0 MiB       5           sampleFile.writelines(parsedWords)

[Finished in 27.1s]

我們可以看到執行過程中的總內存使用情況,輸出中顯示了從文件和 URL 中提取單詞的過程。這就是我們如何分析和理解程序的內存使用情況,以及它如何影響程序的性能和執行速度。


原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/303006.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-31 11:48
下一篇 2024-12-31 11:48

相關推薦

  • Python周杰倫代碼用法介紹

    本文將從多個方面對Python周杰倫代碼進行詳細的闡述。 一、代碼介紹 from urllib.request import urlopen from bs4 import Bea…

    編程 2025-04-29
  • 如何查看Anaconda中Python路徑

    對Anaconda中Python路徑即conda環境的查看進行詳細的闡述。 一、使用命令行查看 1、在Windows系統中,可以使用命令提示符(cmd)或者Anaconda Pro…

    編程 2025-04-29
  • Python列表中負數的個數

    Python列表是一個有序的集合,可以存儲多個不同類型的元素。而負數是指小於0的整數。在Python列表中,我們想要找到負數的個數,可以通過以下幾個方面進行實現。 一、使用循環遍歷…

    編程 2025-04-29
  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python計算陽曆日期對應周幾

    本文介紹如何通過Python計算任意陽曆日期對應周幾。 一、獲取日期 獲取日期可以通過Python內置的模塊datetime實現,示例代碼如下: from datetime imp…

    編程 2025-04-29
  • python強行終止程序快捷鍵

    本文將從多個方面對python強行終止程序快捷鍵進行詳細闡述,並提供相應代碼示例。 一、Ctrl+C快捷鍵 Ctrl+C快捷鍵是在終端中經常用來強行終止運行的程序。當你在終端中運行…

    編程 2025-04-29
  • Python程序需要編譯才能執行

    Python 被廣泛應用於數據分析、人工智慧、科學計算等領域,它的靈活性和簡單易學的性質使得越來越多的人喜歡使用 Python 進行編程。然而,在 Python 中程序執行的方式不…

    編程 2025-04-29
  • Python字典去重複工具

    使用Python語言編寫字典去重複工具,可幫助用戶快速去重複。 一、字典去重複工具的需求 在使用Python編寫程序時,我們經常需要處理數據文件,其中包含了大量的重複數據。為了方便…

    編程 2025-04-29
  • 蝴蝶優化演算法Python版

    蝴蝶優化演算法是一種基於仿生學的優化演算法,模仿自然界中的蝴蝶進行搜索。它可以應用於多個領域的優化問題,包括數學優化、工程問題、機器學習等。本文將從多個方面對蝴蝶優化演算法Python版…

    編程 2025-04-29
  • Python清華鏡像下載

    Python清華鏡像是一個高質量的Python開發資源鏡像站,提供了Python及其相關的開發工具、框架和文檔的下載服務。本文將從以下幾個方面對Python清華鏡像下載進行詳細的闡…

    編程 2025-04-29

發表回復

登錄後才能評論