Profilieren einen Python-Code
-
Verwenden Sie
cProfile
, um einen Python-Code zu profilieren -
Verwendung von
SnakeViz
zur Visualisierung der Profilergebnisse in Python
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:
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.
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