Profilieren einen Python-Code

Fariba Laiq 18 August 2022
  1. Verwenden Sie cProfile, um einen Python-Code zu profilieren
  2. Verwendung von SnakeViz zur Visualisierung der Profilergebnisse in Python
Profilieren einen Python-Code

Profiling ist eine Technik, die Statistiken darüber anzeigt, wie viel Zeit ein Skript zur Ausführung benötigt und wie oft es ausgeführt wird. Dadurch können wir verstehen, welcher Teil des Codes optimiert und das Programm effizient gemacht werden muss.

Verwenden Sie cProfile, um einen Python-Code zu profilieren

cProfile ist ein eingebautes Modul in Python, das die Ausführungszeit eines Programms misst und auch anzeigt, wie oft eine Methode aufgerufen wird. Um einen Python-Code zu profilieren, schreiben wir den Code oder den Methodennamen als String-Argument in den Methodenaufruf run().

Neben der Gesamtlaufzeit des Programms wird auch angezeigt, wie viel Zeit eine bestimmte Methode zum Ausführen benötigt.

Im folgenden Code haben wir eine einfache Vergleichsoperation als String in den Methodenaufruf run() geschrieben. Die Ausgabe zeigt alle Statistiken dieses Codes.

Beispielcode:

import cProfile

cProfile.run("0 < 1")

Ausgabe:

3 function calls in 0.000 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.000    0.000    0.000    0.000 <string>:1(<module>)
        1    0.000    0.000    0.000    0.000 {built-in method builtins.exec}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

Lassen Sie uns nun einen Code schreiben, der mit vielen Methodenaufrufen im Backend viel Zeit in Anspruch genommen hat. Im folgenden Code haben wir eine Methode erstellt, die verschachtelte Schleifen enthält, die die Zahlen an eine Liste anhängen.

Wir werden seinen Namen an die Methode run() übergeben, um diese Methode zu profilieren. Die Ausgabe zeigt alle Statistiken zu diesem Code.

Beispielcode:

import cProfile


def func():
    num = []
    for i in range(1, 100):
        for j in range(1, 100):
            num.append(j)


cProfile.run("func()")

Ausgabe:

9805 function calls in 0.009 seconds

   Ordered by: standard name

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    0.006    0.006    0.009    0.009 <ipython-input-3-d9419f0448d8>:2(func)
        1    0.000    0.000    0.009    0.009 <string>:1(<module>)
        1    0.000    0.000    0.009    0.009 {built-in method builtins.exec}
     9801    0.003    0.000    0.003    0.000 {method 'append' of 'list' objects}
        1    0.000    0.000    0.000    0.000 {method 'disable' of '_lsprof.Profiler' objects}

Verwendung von SnakeViz zur Visualisierung der Profilergebnisse in Python

SnakeViz ist ein webbasiertes Tool zur Profiling-Visualisierung. Wir können es einfach installieren und verwenden.

pip install snakeviz

Angenommen, wir möchten die Ergebnisse des folgenden Codes profilieren und visualisieren. Wir müssen den Code in einer py-Datei in der Umgebung von Python speichern.

Wir haben drei Funktionen, die jeweils eine Schleife enthalten, die 1000 Mal ausgeführt wird und einige arithmetische Operationen ausführt.

Beispielcode:

def func():
    a = 1
    b = 2
    for i in range(1, 1000):
        a += b


def func2():
    a = 1
    b = 2
    for i in range(1, 1000):
        a -= b


def func3():
    a = 1
    b = 2
    for i in range(1, 1000):
        a *= b


func()
func2()
func3()

Wir werden die folgenden Befehle verwenden, um die Ergebnisse zu profilieren und zu visualisieren.

python -m cProfile -o temp.dat My_Script.py
snakeviz temp.dat

Ausgabe:

SnakeViz Eiszapfen

SnakeViz Sunburst

Icicle (Standardeinstellung) und Sunburst sind die beiden von SnakeViz angebotenen Visualisierungsmodi. Bei Icicle beschreibt die Breite eines Rechtecks ​​die in einer Funktion verbrachte Zeit.

Die Winkelausdehnung des Bogens stellt die Ausführungszeit dar, wenn wir zu Sunburst wechseln. Mit der Option Stil können wir die beiden Stile ändern.

Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

Verwandter Artikel - Python Profile