Performance-Messung und Optimierung#

Performance-Messung#

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

airspeed velocity (asv)

ist ein Werkzeug zum Benchmarking von Python-Paketen während ihrer Lebensdauer. Laufzeit, Speicherverbrauch und sogar benutzerdefinierte Werte können aufgezeichnet und in einem interaktiven Web-Frontend angezeigt werden.

perflint

pylint-Erweiterung für Performance-Anti-Patterns, u.a.:

  • W8101: Unnötige list() bei bereits iterierbarem Typ

  • W8102: Falsche Iterator-Methode für dict

  • W8201: Loop-invariant-statement

  • W8202: Globale Namensverwendung in einer Schleife (loop-invariant-global-usage)

  • R8203: Try-except-Blöcke haben einen erheblichen Overhead; vermeidet daher deren Verwendung innerhalb einer Schleife (loop-try-except-usage)

  • W8204: Looped-Slicing von Bytes-Objekten ist ineffizientr; Verwendet stattdessen memoryview() (memoryview-over-bytes)

  • W8205: Der direkte Import des Namens %s ist in dieser Schleife effizienter (dotted-import-in-loop)

Parallele Programmierung#

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