Performance#

Messungen#

Wenn ihr aber erst einmal mit eurem Code gearbeitet habt, kann es nützlich sein, die Effizienz genauer zu untersuchen. Hierfür kann der iPython Profiler oder scalene genutzt werden.

Siehe auch

Anti-Patterns#

Mit perflint lassen sich einige der häufigsten Performance-Anti-Patterns in Python auffinden.

Siehe auch

Optimierungen#

Faster Cpython#

Auf der PyCon US im Mai 2021 stellte Guido van Rossum mit Faster CPython ein Projekt vor, das die Geschwindigkeit von Python 3.11 verdoppeln soll. Die Zusammenarbeit mit den anderen Python-Kernentwicklern ist in PEP 659 – Specializing Adaptive Interpreter geregelt. Zudem gibt es einen offenen Issue Tracker und diverse Werkzeuge zum Sammeln von Bytecode-Statistiken. Von den Änderungen profitieren dürfte vor allem CPU-intensiver Python-Code; bereits in C geschriebener Code, I/O-lastige Prozesse und Multithreading-Code dürften hingegen kaum profitieren.

Siehe auch

Spezielle Datenstrukturen#

NumPy

für Vektorisierungen mit NumPy.

pandas

für SQL-ähnliche Gruppierung und Aggregation.

scipy.spatial

für räumliche Abfragen wie Entfernungen, nächstgelegene Nachbarn usw.

scipy.sparse

dünnbesetzte Matrizen für 2-dimensionale strukturierte Daten.

Sparse

für N-diemensional strukturierte Daten.

scipy.sparse.csgraph

für graphenähnliche Probleme, z.B. die Suche nach kürzesten Wegen.

Xarray

für die Gruppierung über mehrere Dimensionen hinweg.

Cython#

Bei intensiven numerischen Operationen kann Python sehr langsam sein, auch wenn ihr alle Anti-Patterns vermieden und Vektorisierungen mit NumPy genutzt habt. Dann kann das Übersetzen von Code in Cython hilfreich sein. Ein Beispiel hierfür findet ihr in Optimieren von apply mit Cython. Leider muss der Code jedoch häufig umstrukturiert werden und nimmt dadurch an Komplexität zu. Auch werden explizite Type Annotations umständlich.

Siehe auch

Numba#

Numba ist ein JIT-Compiler, der vor allem wissenschaftlichen Python- und NumPy-Code in schnellen Maschinencode übersetzt.

Nebenläufigkeit#

Anhand von drei Beispielen zu Threading, Multiprocessing und Async werden die Regeln und Best Practices bei der Nutzung von Nebenläufigkeit in Python veranschaulicht.