Python ist langsam? Vielleicht. Aber messen Sie zuerst, wo.
cProfile¶
python -m cProfile -s cumulative app.py
snakeviz¶
python -m cProfile -o profile.prof app.py
snakeviz profile.prof
line_profiler¶
@profile
def slow_function(): …
Python Profiling: Ein vollständiger Leitfaden¶
memory_profiler¶
python -m memory_profiler script.py
py-spy – Sampling ohne Overhead¶
py-spy record -o profile.svg – python app.py
Optimierung¶
- Generators statt Lists
- dict/set fuer Lookups
- functools.lru_cache
- numpy fuer Numerik
- multiprocessing fuer CPU-bound
- asyncio fuer I/O-bound
Wann welches Tool verwenden¶
cProfile ist die Standardwahl fuer einen Gesamtueberblick — es zeigt, wie viel Zeit in jeder Funktion verbracht wird. snakeviz visualisiert cProfile-Daten als interaktives Sunburst-Diagramm. line_profiler ist unerlaesslich fuer die Identifizierung langsamer Zeilen innerhalb einer Funktion — dekorieren Sie die verdaechtige Funktion mit @profile und fuehren Sie kernprof aus.
py-spy ist ein Sampling-Profiler, der sich ohne Neustart und ohne Overhead an einen laufenden Prozess anhaengt. Ideal fuer Produktions-Debugging. memory_profiler deckt Memory Leaks und unnoetige Allokationen auf — jede Zeile einer Funktion zeigt den Speicherzuwachs. Fuer NumPy/Pandas-Code verwenden Sie scalene, das zwischen Python- und C-Code unterscheidet. Wichtige Optimierungsregeln: Generators statt List Comprehensions fuer grosse Datensaetze, dict/set fuer O(1)-Lookup statt linearer Suche in Listen, und asyncio fuer I/O-gebundene Operationen.
Workflow¶
cProfile -> snakeviz -> line_profiler -> Optimierung -> erneut messen.