tprof

tprof misst ab Python 3.12 die Zeit, die beim Ausführen eines Moduls in bestimmten Funktionen verbracht wird. Im Gegensatz zu anderen Profilern verfolgt es nur die angegebenen Funktionen mit sys.monitoring, wodurch man sich das Filtern sparen kann.

tprof unterstützt die Verwendung als Befehlszeilenprogramm und mit einer Python-Schnittstelle:

uv run tprof -t MODULE:FUNCTION (-m MODULE | PATH/TO/SCRIPT)

Angenommen, ihr habt festgestellt, dass die Erstellung von pathlib.Path-Objekten im main-Modul euren Code verlangsamt. So könnt ihr dies mit tprof messen:

$ uv run tprof -t pathlib:Path.open  -m main
🎯 tprof results:
 function            calls total mean ± σ  min … max
 pathlib:Path.open()     1  93μs 93μs     93μs … 93μs

Mit der -x-Option könnt ihr auch zwei Funktionen miteinander vergleichen:

$ uv run tprof -x -t old -m main -t new -m main
🎯 tprof results:
 function   calls total mean ± σ  min … max  delta
 main:old()     1  41μs 41μs     41μs … 41μs -
 main:new()     1  20μs 20μs     20μs … 20μs -50.67%
tprof(*targets, label: str | None = None, compare: bool = False)

verwendet diesen Code als Kontextmanager in eurem Code, um ein Profil in einem bestimmten Block zu erstellen. Der Bericht wird jedes Mal ausgegeben, wenn der Block durchlaufen wurde.

*targets

sind aufrufbare Elemente zum Profiling oder Referenzen zu Elementen, die mit pkgutil.resolve_name() aufgelöst werden.

label

ist eine optionale Zeichenfolge, die als Kopfzeile dem Bericht hinzugefügt werden kann.

compare

auf True gesetzt, wird der Vergleichsmodus aktiviert.

Beispiel:

from pathlib import Path

from tprof import tprof

with tprof(Path.open):
    p = Path("docs", "save-data", "myfile.txt")
    f = p.open()
$ uv run python main.py
🎯 tprof results:
 function            calls total mean ± σ  min … max
 pathlib:Path.open()     1  82μs 82μs     82μs … 82μs