Skip to content

Commit 9f3d26c

Browse files
committed
📝 New features in Python 3.15
* profiling.tracing and profiling.sampling * Tachyon * Python JIT compiler
1 parent a3b9bbc commit 9f3d26c

File tree

4 files changed

+128
-3
lines changed

4 files changed

+128
-3
lines changed

docs/conf.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,7 +159,7 @@
159159
"https://jupyter-tutorial.readthedocs.io/de/latest",
160160
None,
161161
),
162-
"python": ("https://docs.python.org/3", None),
162+
"python": ("https://docs.python.org/3.15", None),
163163
"ipython": ("https://ipython.readthedocs.io/en/latest", None),
164164
"pytest": ("https://docs.pytest.org/en/latest", None),
165165
"jupyter-notebook": (

docs/performance/index.rst

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,22 @@ Performance-Messungen
6666
---------------------
6767

6868
Wenn ihr erst einmal mit eurem Code gearbeitet habt, kann es nützlich sein, die
69-
Effizienz genauer zu untersuchen. Hierfür kann :mod:`cProfile`,
69+
Effizienz genauer zu untersuchen. Hierfür kann :abbr:`z. B. (zum Beispiel)`
70+
`cProfile <https://docs.python.org/3.14/library/profile.html#module-cProfile>`_,
7071
:doc:`ipython-profiler` oder :doc:`scalene` genutzt werden.
7172

73+
.. versionadded:: Python3.15
74+
Mit :pep:`799` wird ein spezielles Profiling-Modul zur Verfügung stehen, das
75+
die in Python integrierten Profiling-Tools unter einem einheitlichen
76+
Namespace organisiert. Dieses Modul enthält:
77+
78+
:mod:`profiling.tracing`
79+
deterministische Funktionsaufrufverfolgung, die aus `cProfile
80+
<https://docs.python.org/3.14/library/profile.html#module-cProfile>`_
81+
verschoben wurde.
82+
:mod:`profiling.sampling`
83+
der neue statistische Sampling-Profiler :doc:`tachyon`.
84+
7285
.. seealso::
7386
* `airspeed velocity (asv) <https://asv.readthedocs.io/en/stable/>`_ ist ein
7487
Werkzeug zum Benchmarking von Python-Paketen während ihrer Lebensdauer.
@@ -85,6 +98,7 @@ Effizienz genauer zu untersuchen. Hierfür kann :mod:`cProfile`,
8598

8699
ipython-profiler.ipynb
87100
scalene.ipynb
101+
tachyon
88102

89103
Suche nach bestehenden Implementierungen
90104
----------------------------------------
@@ -229,6 +243,20 @@ Wenn ihr mit eurem Projekt nicht bis zur Veröffentlichung von Python 3.11 in de
229243
finalen Version voraussichtlich am 24. Oktober 2022 warten wollt, könnt ihr euch
230244
auch die folgenden Python-Interpreter anschauen:
231245

246+
Python JIT compiler
247+
~~~~~~~~~~~~~~~~~~~
248+
249+
.. versionadded:: Python3.15
250+
Der `JIT-Compiler <https://de.wikipedia.org/wiki/Just-in-time-Kompilierung>`_
251+
in Python 3.15 zeigt eine mittlere Leistungssteigerung von 3–4 gegenüber dem
252+
Standard-CPython-Interpreter, wobei die Performance-Messungen schwanken
253+
zwischen -20 und über 100 % auf x86-64-Linux- und AArch64-macOS-Systemen.
254+
255+
.. seealso::
256+
* `The JIT Compiler
257+
<https://github.com/python/cpython/blob/main/Tools/jit/README.md>`_
258+
* :ref:`whatsnew315-jit`
259+
232260
Cython
233261
~~~~~~
234262

docs/performance/tachyon.rst

Lines changed: 97 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,97 @@
1+
Tachyon
2+
=======
3+
4+
Tachyon ist ein neuer statistischer Sampling-Profiler, der in Python 3.15 als
5+
:mod:`profiling.sampling` hinzugefügt wurde. Dieser Profiler ermöglicht eine
6+
leistungsstarke Analyse laufender Python-Prozesse mit geringem Overhead, ohne
7+
dass Codeänderungen oder ein Neustart des Prozesses erforderlich sind.
8+
9+
Im Gegensatz zu deterministischen Profiler wie :mod:`profiling.tracing`, die
10+
jeden Funktionsaufruf instrumentieren, erfasst :mod:`profiling.sampling`
11+
regelmäßig Stack-Traces aus laufenden Prozessen.
12+
13+
Zu den wichtigsten Funktionen gehören:
14+
15+
Profiling ohne Overhead
16+
:mod:`profiling.sampling` fügt sich in jeden laufenden Python-Prozess ein,
17+
ohne dessen Leistung zu beeinträchtigen. Dies ist Ideal für die
18+
Fehlerbehebung in Produktiv-Umgebungen, wo eure Anwendung nicht neu
19+
gestartet oder verlangsamt werden darf.
20+
Keine erforderlichen Codeänderungen
21+
Bestehende Anwendungen können ohne Neustart profiliert werden. Ihr müsst
22+
einfach anhand der PID den Profiler auf einen laufenden Prozess richten und
23+
mit der Datenerhebung beginnen.
24+
Profiliert laufende Prozesse oder Module
25+
:samp:`attach`
26+
profiliert laufende Prozesse anhand der PID.
27+
:samp:`run -m {MODULE}`
28+
führt Module aus und profiliert sie.
29+
Mehrere Profiling-Modi
30+
Ihr könnt auswählen, was gemessen werden soll:
31+
32+
``--mode wall``
33+
Standardwert, der die tatsächlich verstrichene Zeit misst einschließlich
34+
I/O, Netzwerkwartezeiten und Blockierungsvorgängen. Dies ist ideal
35+
geeignet um zu verstehen, wo euer Programm Zeit verbraucht,
36+
einschließlich der Wartezeiten auf externe Ressourcen.
37+
``--mode cpu``
38+
misst nur die aktive CPU-Ausführungszeit, ohne I/O-Wartezeiten und
39+
Blockierungen. Verwendet diese Option, um CPU-gebundene Engpässe zu
40+
identifizieren und die Rechenleistung zu optimieren.
41+
``--mode gil``
42+
misst die Zeit für das :abbr:`GIL (Global Interpreter Lock)` von Python.
43+
Verwendet diese Option, um zu ermitteln, welche Threads durch das GIL
44+
ausgebremst werden.
45+
``--mode exception``
46+
erfasst nur Samples von Threads mit einer aktiven Ausnahme. Verwendet
47+
diese Option, um den Overhead beim Exception Handling zu analysieren.
48+
``-a``
49+
profiliert alle Threads oder nur den Haupt-Thread, wodurch das
50+
Verständnis für des Verhalten von Multithread-Anwendungen wächst.
51+
52+
Mehrere Ausgabeformate
53+
Wählt die Visualisierung, die am besten zu Ihrem Workflow passt:
54+
55+
``--pstats``
56+
liefert detaillierte tabellarische Statistiken, kompatibel mit
57+
:mod:`pstats`. Es zeigt die Zeitmessung auf Funktionsebene mit direkten
58+
und kumulativen Stichproben an und ist am besten geeignet für
59+
detaillierte Analysen und die Integration mit vorhandenen
60+
Python-Profiling-Tools.
61+
``--collapsed``
62+
erzeugt zusammengefasste Stack-Traces. Dieses Format wurde speziell für
63+
die Erstellung von `Flame Graphs
64+
<https://www.brendangregg.com/flamegraphs.html>`_ mit externen Tools wie
65+
`Brendan Greggs FlameGraph-Skripten
66+
<https://github.com/brendangregg/FlameGraph>`_ oder `Speedscope
67+
<https://jamie-wong.com/post/speedscope/>`_ entwickelt.
68+
``--flamegraph``
69+
erzeugt einen eigenständigen interaktiven HTML-Flamegraph mit `D3.js
70+
<https://d3js.org/>`_, der sich direkt in Ihrem Browser für eine
71+
sofortige visuelle Analyse öffnet.
72+
``--gecko``
73+
erzeugt ein Gecko-Profiler-Format, das mit `Firefox Profiler
74+
<https://profiler.firefox.com>`_ kompatibel ist. Die Ausgabe kann in
75+
Firefox Profiler hochgeladen werden, um eine erweiterte
76+
zeitachsenbasierte Analyse mit Funktionen wie Stapeldiagrammen, Markern
77+
und Netzwerkaktivitäten durchzuführen.
78+
``--heatmap``
79+
erzeugt eine interaktive HTML-Heatmap-Visualisierung und erstellt eine
80+
Heatmap je Datei, die genau zeigen, wo Zeit auf Quellcodeebene
81+
verbraucht wird.
82+
83+
``--live``
84+
`top <https://man7.org/linux/man-pages/man1/top.1.html>`_-ähnliche
85+
Oberfläche, wodurch ihr die Leistung eurer Anwendung während der Ausführung
86+
mit interaktiver Sortierung und Filterung Überwachen könnt.
87+
``--async-aware``
88+
Profilerstellung für :doc:`async/await-Code <asyncio-example>`, die euch
89+
anzeigt, welche Coroutinen Zeit verbrauchen. Weitere Optionen zeigen euch
90+
nur laufende Aufgaben oder alle Aufgaben einschließlich der wartenden an.
91+
``--opcodes``
92+
sammelt Bytecode-Opcode-Informationen für das Profiling auf Befehlsebene und
93+
zeigt an, welche Bytecode-Befehle ausgeführt werden, einschließlich
94+
Spezialisierungen aus dem adaptiven Interpreter.
95+
96+
.. seealso::
97+
:mod:`profiling.sampling`

pyproject.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ docs = [
4141
"matplotlib",
4242
"nbsphinx",
4343
"notebook",
44-
"sphinx<8.2",
44+
"sphinx<8.2", # furo requires sphinx < 8.2
4545
"sphinx-copybutton",
4646
"sphinx-inline-tabs",
4747
"sphinx-lint",

0 commit comments

Comments
 (0)