CPython

Cpython
Python logo and wordmark.svg
Originalautor (en) Guido van Rossum
Entwickler (en) Python Core -Entwickler und die Python -Community, unterstützt von der Python Software Foundation
Erstveröffentlichung 26. Januar 1994; Vor 28 Jahren
Stabile Version
3.10.5[1] Edit this on Wikidata / 6. Juni 2022; Vor 55 Tagen
Repository https://github.com/python/cpython
Geschrieben in C, Python
Plattform 42 Plattformen; sehen § Verteilung
Verfügbar in Englisch
Typ Python -Programmiersprache Interpreter
Lizenz Python Software Foundation Lizenz
Webseite www.Python.org

Cpython ist der Referenzimplementierung des Python -Programmiersprache. Geschrieben in C und Python, CPython ist die Standard- und am weitesten verbreitete Implementierung der Python -Sprache.

Cpython kann als beide definiert werden Dolmetscher und ein Compiler wie es Python -Code kompiliert in Bytecode Vor dem Interpretieren. Es hat ein Fremdenfunktionsschnittstelle mit mehreren Sprachen, einschließlich C, in denen man explizit schreiben muss Bindungen in einer anderen Sprache als Python.

Entwurf

Ein besonderes Merkmal von CPython ist, dass es a verwendet wird Global Interpreter Lock (GIL) auf jedem CPython -Dolmetscher Prozesswas bedeutet, dass innerhalb eines einzelnen Prozesses nur ein Thread Python verarbeitet Bytecode zu jeder Zeit.[2] Dies bedeutet nicht, dass es keinen Sinn gibt Multithreading; Das häufigste Multithreading -Szenario ist wo Themen Warten meistens auf externe Prozesse, um abzuschließen.

Dies kann passieren, wenn mehrere Themen separate Clients bedienen. Ein Thread wartet möglicherweise darauf, dass ein Kunde antwortet, und ein anderer wartet auf eine Datenbank Abfrage zur Ausführung, während der dritte Thread tatsächlich den Python -Code verarbeitet.

Das GIL bedeutet jedoch, dass CPython nicht für Prozesse geeignet ist, die CPU-intensive Algorithmen im Python-Code implementieren, die möglicherweise über mehrere Kerne verteilt werden könnten.

In realen Anwendungen sind Situationen, in denen der GIL ein erheblicher Engpass ist, ziemlich selten. Dies liegt daran, dass Python eine von Natur aus langsame Sprache ist und im Allgemeinen nicht für CPU-intensive oder zeitempfindliche Operationen verwendet wird. Python wird normalerweise auf der oberen Ebene verwendet und ruft Funktionen in Bibliotheken auf, um spezielle Aufgaben auszuführen. Diese Bibliotheken sind im Allgemeinen nicht in Python geschrieben, und Python -Code in einem anderen Thread kann ausgeführt werden, während ein Aufruf eines dieser zugrunde liegenden Prozesse stattfindet. Die Nicht-Python-Bibliothek, die aufgerufen wird, um die CPU-intensive Aufgabe auszuführen, unterliegt nicht dem GIL und kann gleichzeitig viele Threads auf mehreren Prozessoren ohne Einschränkung ausführen.

Die Parallelität des Python -Codes kann nur mit separaten CPython -Interpreter -Prozessen erreicht werden, die von a verwaltet werden Multitasking -Betriebssystem. Dies kompliziert die Kommunikation zwischen Gleichzeitige Pythonprozesseobwohl das Multiprozessierung Das Modul mildert dies etwas; Dies bedeutet, dass Anwendungen, die wirklich von gleichzeitiger Python-Code-Ausführung profitieren können, mit einer begrenzten Menge an implementiert werden können Überkopf.

Das Vorhandensein des GIL vereinfacht die Implementierung von CPython und erleichtert die Implementierung von Multi-Threaden-Anwendungen, die nicht von der gleichzeitigen Ausführung von Python-Code profitieren. Ohne GIL müssen Multiprocessing -Apps jedoch sicherstellen, dass der gesamte gemeinsame Code sicher ist.

Obwohl viele Vorschläge zur Beseitigung des GIL gemacht wurden, bestand der allgemeine Konsens, dass die Vorteile des GIL in den meisten Fällen die Nachteile überwiegen. In den wenigen Fällen, in denen der GIL ein Engpass ist, sollte die Anwendung um die Multiprozessationsstruktur basieren.

Geschichte

Under Swallow

Under Swallow war ein Optimierungszweig von CPython, der vollständig kompatibel und deutlich schneller ist. Es zielte darauf ab, seine Ziele zu erreichen, indem CPythons Brauch ergänzt wurde virtuelle Maschine mit einer Just-in-Time-Compiler gebaut mit Llvm.

Das Projekt hatte ein Ziel einer Geschwindigkeitsverbesserung um den Faktor von fünf gegenüber CPython festgestellt.[3] Dieses Ziel wurde nicht erreicht.[4]

Das Projekt wurde von gesponsert von Googleund die Projektbesitzer Thomas Wouters, Jeffrey Yasskin und Collin Winter sind Vollzeit-Google-Mitarbeiter. Die meisten Projektmitglieder waren jedoch keine Google -Mitarbeiter.[5] Unladen Swallow wurde veranstaltet Google -Code.[6]

Wie viele Dinge in Bezug Monty Python Referenz, speziell auf den Witz über die Luftgeschwindigkeitsgeschwindigkeit von Unladen Schwalben in Monty Python und der Heilige Gral.

Obwohl es alle veröffentlichten Ziele nicht hatte, produzierte Unladen Swallow einen Code, der zur Haupt -Python -Implementierung hinzugefügt wurde, z. B. Verbesserungen des CPICKLE -Moduls.[7]

Im Juli 2010 spekulierten einige Beobachter darüber, ob das Projekt tot oder sterben, seit der Q4 -Meilenstein 2009 noch nicht veröffentlicht worden war.[8] Der Verkehr auf der Versandliste von Unladen hatte von 500 Nachrichten im Januar 2010 auf weniger als 10 im September 2010 gesunken.[9] Es wurde auch berichtet, dass Unladen die Finanzierung von Google verlor.[10] Im November 2010 kündigte einer der Hauptentwickler an, dass "Jeffrey und ich für Google an anderen Projekten gezogen wurden".[11]

Die Zweigabteilung für Q4 2009 wurde am 26. Januar 2010 gegründet.[12] Auf der Website wurde jedoch keine Werbung gemacht. Darüber hinaus in Bezug auf die langfristigen Pläne und als das Projekt die Python 2.7-Version verpasste, a Python Enhancement Vorschlag (PEP)[4] wurde akzeptiert, was eine Zusammenführung von unladenen Schwalben zu einem speziellen Py3k-Jit-Zweig von Pythons Beamter vorschlug Repository. Ab Juli 2010 war diese Arbeit noch nicht abgeschlossen.[13] Diese Verschmelzung hätte einige Zeit gedauert, da der unladene Swallow ursprünglich auf Python 2.6 beruhte[14] mit welcher Python 3 die Kompatibilität gebrochen hat (siehe Python 3000 für mehr Details). Der PEP wurde jedoch anschließend zurückgezogen.

Anfang 2011 wurde klar, dass das Projekt gestoppt wurde.[15]

Unvered Swallow Release History

  • 2009 Q1[16]
  • 2009 Q2[17]
  • 2009 Q3: Reduzieren Sie den Speichergebrauch, verbessern Sie die Geschwindigkeit[18]

Verteilung

Offiziell unterstützte Tier-1-Plattformen sind Fenster, Linux und Mac OS (und auch Raspberry Pi OSund Linux für S390X auf untere Stufe).

Es gibt mehr Plattformen mit Arbeitsimplementierungen, darunter:[19]

Unix-artig
Spezial und eingebettet
Sonstiges

Pep 11[20] listet Plattformen auf, die in CPython von der nicht unterstützt werden Python Software Foundation. Diese Plattformen können weiterhin von externen Ports unterstützt werden. Diese Ports umfassen:

  • Atheos (nicht unterstützt seit 2.6)
  • Beos (nicht unterstützt seit 2.6)
  • DOS (nicht unterstützt seit 2.0)
  • Irrix 4 (nicht unterstützt seit 2.3)
  • Irrix 5 und später (nicht unterstützt seit 3.2, 3,7)[21]
  • Mac OS 9 (nicht unterstützt seit 2.4)
  • Minix (nicht unterstützt seit 2.3)
  • OpenVMS (nicht unterstützt seit 3.3)
  • OS/2 (nicht unterstützt seit 3.3)
  • RISC OS (nicht unterstützt seit 3.0)
  • Windows XP (nicht unterstützt seit 3.5)
  • Windows 2000 (nicht unterstützt seit 3.3)
  • Windows 3.x (nicht unterstützt seit 2.0)
  • Windows 9x (nicht unterstützt seit 2.6)
  • Windows NT4 (nicht unterstützt seit 2.6)

Externe Ports, die nicht in die offizielle Version von CPython von Python Software Foundation mit Links zu ihrer Hauptentwicklungsstelle integriert sind, enthalten häufig zusätzliche Module für plattformspezifische Funktionen wie Grafiken und Sound-API für PSP und SMS und Kamera-API für S60. Diese Ports umfassen:

Enterprise Linux

Diese Python-Versionen werden mit derzeit unterstützten Enterprise Linux-Verteilungen verteilt.[29] Der Unterstützungsstatus von Python in der Tabelle bezieht sich auf die Unterstützung des Python -Kernteams und nicht aus dem Vertriebsbetrieb.

Enterprise Linux
Vertriebsversion Verteilung Lebensende Python -Version
Ubuntu 20.04 LTS (fokale Fossa) 2030-04[30][Benötigt Update] [31] Ältere Version, dennoch gepflegt: 3.8[32]
Ubuntu 18.04 LTS (Bionic Beaver) 2028-04[33] Alte Version, nicht mehr gepflegt: 2.7[34] Alte Version, nicht mehr gepflegt: 3.6[35]
Ubuntu 16.04 LTS (Xenial Xerus) 2021-04-30[36][Benötigt Update] Alte Version, nicht mehr gepflegt: 2.7[34] Alte Version, nicht mehr gepflegt: 3.5[35]
Debian 11 2026-06[37] Ältere Version, dennoch gepflegt: 3.9[37]
Debian 10 2024-06[38] Alte Version, nicht mehr gepflegt: 2.7[39] Ältere Version, dennoch gepflegt: 3.7[40]
Debian 9 2022-06-30[41][Benötigt Update] Alte Version, nicht mehr gepflegt: 2.7[42] Alte Version, nicht mehr gepflegt: 3.5[43]
Red Hat Enterprise Linux 8 2029 Alte Version, nicht mehr gepflegt: 2.7[44] Alte Version, nicht mehr gepflegt: 3.6
Red Hat Enterprise Linux 7 2024-11-30[45] Alte Version, nicht mehr gepflegt: 2.7[46]
Centos 8 2029-05-31 Alte Version, nicht mehr gepflegt: 2.7 Alte Version, nicht mehr gepflegt: 3.6
Centos 7 2024-06-30 Alte Version, nicht mehr gepflegt: 2.7[47]
SUSE Linux Enterprise Server 15 2031-07-31 Alte Version, nicht mehr gepflegt: 2.7[48] Alte Version, nicht mehr gepflegt: 3.6
SUSE Linux Enterprise Server 12 2027-10-31 Alte Version, nicht mehr gepflegt: 2.7[49]
SUSE Linux Enterprise Server 11 2022-03-31[Benötigt Update] Alte Version, nicht mehr gepflegt: 2.7[49]
Legende:
Alte Version
Ältere Version, noch gepflegt
Letzte Version
Neueste Vorschau -Version
Zukünftige Veröffentlichung

Alternativen

CPython ist eines von mehreren "Produktionsqualität" Python -Implementierungen einschließlich: Jython, geschrieben in Java für die Java virtuelle Maschine (JVM), Pypy, geschrieben in Rpython und übersetzt in c und Ironpython, was geschrieben ist in C# für die Gemeinsame Sprachinfrastruktur. Es gibt auch mehrere experimentelle Implementierungen.[50]

Verweise

  1. ^ "Python 3.10.5 ist jetzt verfügbar". 6. Juni 2022. Abgerufen 7. Juni 2022.
  2. ^ "Initialisierung, Abschluss und Fäden". Python v3.8.3 Dokumentation. Abgerufen 2020-06-04.
  3. ^ Paul, Ryan (2009-03-26). "ARS Technica -Bericht über unladene Schwalbenziele". Arstechnica.com. Abgerufen 2011-08-19.
  4. ^ a b Winter, Collin; Yasskin, Jeffrey; Kleckner, Reid (2010-03-17). "Pep 3146 - Verschmelzung unladen in cpython" verschmelzen ". Python.org.
  5. ^ "Leute, die an unladenen Schwalben arbeiten". Archiviert von das Original Am 2015-10-29. Abgerufen 2019-08-08.
  6. ^ "Under Swallow -Projektseite". Abgerufen 2011-08-19.
  7. ^ "Ausgabe 9410: Fügen Sie den Optimierungen von Unlade Swallow zu Python 3's Pickle hinzu. - Python Tracker". Bugs.python.org. Abgerufen 2019-08-08.
  8. ^ "Nachricht auf comp.lang.python". Abgerufen 2011-08-19.
  9. ^ "Unladen Swallow | Google -Gruppen". Abgerufen 2011-08-19.
  10. ^ "Reddit -Beitrag von einem unladenen Kommitter". Reddit.com. 2010-06-24. Abgerufen 2011-08-19.
  11. ^ Winter, Collin (8. November 2010). "Aktueller Status von unladen-swallow".
  12. ^ "2009 Q4 Release Branch Creation". 2010-01-26. Abgerufen 2011-08-19.
  13. ^ "Entwickler konzentrieren sich auf die Zusammenführung in PY3K-Jit". 2010-07-13. Abgerufen 2011-08-19.
  14. ^ "Unleden Swallow -Basislinie". Python.org. Abgerufen 2011-08-19.
  15. ^ Kleckner, Reid (26. März 2011). "Unladen Swallow Retrospektive". QinsB ist kein Software -Blog (qinsb.blogspot.com).
  16. ^ "UNLADEN SWALLE 2009Q1". Unladen-Swallow, eine schnellere Implementierung von Python. Abgerufen 19. Oktober 2012.
  17. ^ "UNLADEN SWALLE 2009Q2". Unladen-Swallow, eine schnellere Implementierung von Python. Abgerufen 19. Oktober 2012.
  18. ^ "UNLADEN SWALLE 2009Q3". Unladen-Swallow, eine schnellere Implementierung von Python. Abgerufen 19. Oktober 2012.
  19. ^ "Pythonimplementations". Abgerufen 19. Juli 2012.
  20. ^ "PEP 11 - Unterstützung für kleine gebrauchte Plattformen" entfernen ". Python.org. Abgerufen 2019-08-08.
  21. ^ "Irrix hat immer noch unterstützt?".
  22. ^ Amigapython
  23. ^ iseriespython
  24. ^ Pythond
  25. ^ http://yellowblue.free.fr/yiki/doku.php/en:dev:python:Start Python 2 und 3
  26. ^ Stackloser Python für PSP
  27. ^ Python Windows CE -Port
  28. ^ "Python". Vsi. Abgerufen 2021-08-31.
  29. ^ https://linuxlifecycle.com
  30. ^ "Ubuntu Release -Zyklus". Ubuntu. Abgerufen 2021-01-18.
  31. ^ "Mit Python 2 bewegt sich Ubuntu 20.04 LTS zusammen mit seiner Python 2 -Entfernung - Phoronix".. www.phoronix.com. Abgerufen 2020-04-01.
  32. ^ "Binärpaket" Python3 "in Ubuntu Focal". Startpad.net.
  33. ^ "Ubuntu 18.04 erweiterte sich auf 2028". Serverwatch.com. 2018-11-15. Abgerufen 2019-09-09.
  34. ^ a b "Python-Defaults-Paket: Ubuntu". Canonical Ltd. 2018-06-08. Abgerufen 2018-06-08.
  35. ^ a b "Python3-Defaults-Paket: Ubuntu". Canonical Ltd. 2018-06-08. Abgerufen 2018-06-08.
  36. ^ Wissenschaft, Carnegie Mellon University School of Computer. "Ubuntu 16.04 - Ende des Lebens in 2021 - SCS -Computing -Einrichtungen - Carnegie Mellon University". computer.cs.cmu.edu. Abgerufen 2021-02-15.
  37. ^ a b "Debian - News - Debian 11" Bullseye "veröffentlicht". www.debian.org. Abgerufen 2022-01-04.
  38. ^ "LTS - Debian Wiki". wiki.debian.org. Abgerufen 2021-02-15.
  39. ^ "Debian - Details zum Paketpython in Buster". pakete.debian.org. Abgerufen 2019-09-13.
  40. ^ "Debian - News - Debian 10" Buster "veröffentlicht". www.debian.org. Abgerufen 2019-08-09.
  41. ^ "Debian-Nachrichten-Debian 8 Langzeitunterstützung erreicht das Ende des Lebens". www.debian.org. Abgerufen 2021-02-15.
  42. ^ "Destrowatch.com: Debian". Distrowatch.com. 2017-10-15. Abgerufen 2017-10-15.
  43. ^ "Debian - Details des Pakets Python3 in Stretch". Abgerufen 2017-12-19.
  44. ^ "Python in Rhel 8". Red Hat Developer Blog. 2018-11-14. Archiviert von das Original Am 2019-05-10. Abgerufen 2019-05-10.
  45. ^ "Red Hat Enterprise Linux Lebenszyklus". Red Hat -Kundenportal. Abgerufen 2020-04-01.
  46. ^ "Destrowatch.com: Red Hat Enterprise Linux". Distrowatch.com. 2017-09-07. Abgerufen 2017-10-15.
  47. ^ "Destrowatch.com: Centos". Distrowatch.com. 2017-09-14. Abgerufen 2017-10-15.
  48. ^ "Release -Notizen | SUSE Linux Enterprise Desktop/Suse Linux Enterprise Workstation Erweiterung 15 Ga". www.suse.com. Abgerufen 2019-08-08.
  49. ^ a b "Distrowatch.com: OpenSuse". Distrowatch.com. 2017-10-14. Abgerufen 2017-10-15.
  50. ^ Martelli, Alex (2006). Python auf den Punkt gebracht (2. Aufl.). O'Reilly. S. 5–7. ISBN 978-0-596-10046-9.

Weitere Lektüre

  • Shaw, Anthony (2021). CPython -Interna: Ihr Leitfaden zum Python 3 -Dolmetscher. Echter Python. ISBN 9781775093343.

Externe Links