Cython

Cython
Cython-logo.svg
Entwickler Robert Bradshaw, Stefan Behnel et al.
Erstmals erschienen 28. Juli 2007; vor 15 Jahren[1]
Stabile Version 0,29.30[2] Edit this on Wikidata (17. Mai 2022; Vor 2 Monaten) [±]
Vorschau -Version 3.0.0a11 (31. Juli 2022; vor 3 Tagen[3]) [±]
Implementierungssprache Python
OS Fenster, Mac OS, Linux
Lizenz Apache -Lizenz 2.0
Dateiname -Erweiterungen .pyx, .pxd, .pxi [4]
Webseite Cython.org Edit this at Wikidata
Beeinflusst von
C, Python

Cython (/ˈsθɒn/) ist eine Programmiersprache, die darauf abzielt, a zu sein Superset des Python -Programmiersprache, entworfen, um zu geben C-Eine ähnliche Leistung mit Code, der hauptsächlich in Python mit optional zusätzlichem C-inspirierter Syntax geschrieben ist.[5][6]

Cython ist a kompilierte Sprache das wird normalerweise zur Erzeugung verwendet Cpython Erweiterungsmodule. Annotierter Python-ähnlicher Code wird mit c oder zusammengestellt C ++ dann automatisch In Schnittstellencode eingewickeltErzeugung von Erweiterungsmodulen, die mit dem regulären Python -Code unter Verwendung der Import -Anweisung geladen und verwendet werden können, jedoch mit einem deutlich weniger rechnerischen Overhead bei Laufzeit. Cython erleichtert auch das Verpacken unabhängiger C- oder C ++-Code in python-importierbare Module.

Cython ist in Python und C geschrieben und arbeitet an Fenster, Mac OS, und Linux, Erstellen von Quelldateien, die mit CPython 2.6, 2.7 und 3.3 und späteren Versionen kompatibel sind.

Cython 3.0.0 ist in der Entwicklung.[7]

Entwurf

Cython arbeitet mit einem Standard -Python -Modul. Das Verhalten unterscheidet sich jedoch von der Standard -Python, da der Modulcode, der ursprünglich in Python geschrieben wurde, in C übersetzt wird. Während der resultierende Code schnell ist, wird viele Aufrufe in die CPython -Interpreter- und CPython -Standardbibliotheken für die Ausführung der tatsächlichen Arbeiten durchgeführt. Die Auswahl dieser Vereinbarung wurde erheblich in der Entwicklungszeit von Cython gespart, aber Module sind abhängig von der Python -Interpreter und der Standardbibliothek.

Obwohl der größte Teil des Codes C basiert, ist in der Regel ein kleiner Stubloader erforderlich, der in interpretierter Python geschrieben wurde (es sei denn, das Ziel ist es, einen in C geschriebenen Lader zu erstellen, der möglicherweise mit den undokumentierten Interna von CPython zusammenarbeitet). Dies ist jedoch kein großes Problem aufgrund des Vorhandenseins des Python -Dolmetschers.[8]

Cython hat a Fremdenfunktionsschnittstelle zum Aufrufen C/C ++ Routinen und die Fähigkeit, das zu deklarieren statischer Typ von Unterroutinenparametern und -Enteilen, lokalen Variablen und Klassenattributen.

Ein Cython -Programm, das denselben Algorithmus wie ein entsprechendes Python -Programm implementiert, kann aufgrund von Unterschieden zwischen den Modellen CPython und Cython weniger Rechenressourcen wie Kernspeicher- und Verarbeitungszyklen konsumieren. Ein grundlegendes Python -Programm wird vom CPython geladen und ausgeführt virtuelle MaschineSo konsumieren sowohl die Laufzeit als auch das Programm selbst Computerressourcen. Ein Cython -Programm wird mit C -Code zusammengestellt, das weiter mit dem Maschinencode zusammengestellt wird, sodass die virtuelle Maschine nur kurz verwendet wird, wenn das Programm geladen wird.[9][10][11][12]

Cython beschäftigt:

Die Leistung hängt sowohl davon ab, welcher C -Code von Cython generiert wird als auch, wie dieser Code vom C -Compiler zusammengestellt wird.[15]

Geschichte

Cython ist ein Derivat der Pyrex -Spracheund unterstützt mehr Funktionen und Optimierungen als Pyrex.[16][17] Cython war gegabelt von Pyrex im Jahr 2007 von Entwicklern der Salbei Computer -Algebra -Paket, weil sie mit Pyrex 'Grenzen unzufrieden waren und von Pyrex -Betreuer Greg Ewing, der sich einen viel kleineren Spielraum für sein Tool vorstellte, nicht von Pyrex akzeptiert konnten, als die weisen Entwickler im Sinn hatten. Sie gaben dann Pyrex als Sagex. Als sie feststellten, dass die Leute Sage nur zum Erhalten von Sagex und Entwicklern anderer Pakete (einschließlich Stefan Behnel, der das unterhält Xml Bibliothek LXML) unterhielt auch Pyrexgabeln, Sagex wurde vom Weisenprojekt abgeteilt und fusioniert mit Cython-lxml Cython werden.[18]

Cython -Dateien haben a .pyx Verlängerung. Der Cython -Code sieht im einfachsten aus wie Python -Code. Während der Standard -Python jedoch ist dynamisch getipptIn Cython können optional Typen bereitgestellt werden, sodass eine verbesserte Leistung ermöglicht werden kann, sodass Loops nach Möglichkeit in C -Schleifen umgewandelt werden können. Zum Beispiel:

def Primzahlen(int Kmax):  # Das Argument wird in INT umgewandelt oder einen Typeerror erhöht.  CDEF int n, k, i  # Diese Variablen werden mit C -Typen deklariert.  CDEF int p[1000]  # Andere C Typ  Ergebnis = []  # Ein Python -Typ  wenn Kmax > 1000:  Kmax = 1000  k = 0  n = 2  während k < Kmax:  i = 0  während i < k und n % p[i] ! = 0:  i = i + 1  wenn i == k:  p[k] = n  k = k + 1  Ergebnis.anhängen(n)  n = n + 1  Rückkehr Ergebnis 

Beispiel

Hallo Welt in Cython

Eine Probe Hallo Welt Das Programm für Cython ist komplexer als in den meisten Sprachen, da es mit der Python C api und der setuptools Einrichtung für Erweiterungsgebäude. Für ein grundlegendes Projekt sind mindestens drei Dateien erforderlich:

  • A setup.py Datei, um die aufzurufen setuptools Erstellenprozess, der das Erweiterungsmodul generiert
  • Ein Hauptpython -Programm zum Laden des Erweiterungsmoduls
  • Cython -Quelldatei (en)

Die folgenden Codeauflistungen zeigen den Erstellung und den Startprozess:

# Hallo.pyx - Python -Modul, dieser Code wird von Cython in C übersetzt. def sag Hallo():  drucken("Hallo Welt!") 
# stirp.py - Python Stubloader, lädt das von Cython hergestellte Modul. # Dieser Code wird immer interpretiert, wie normale Python. # Es ist nicht mit C zusammengestellt. importieren hallo hallo.sag Hallo() 
# setup.py - unnötig, wenn auch nicht den Code umverteilen, siehe unten aus setuptools importieren Konfiguration aus Cython.build importieren Cythonize Konfiguration(Name = "Hallo Welt -App",  ext_modules = Cythonize("*.pyx")) 

Diese Befehle erstellen und starten das Programm:

$ python setup.py Build_ext --konform $ python stirp.py

Verwenden Sie in Ipython/Jupyter Notebook

Ein einfacherer Weg, um mit Cython zu beginnen, ist die Befehlszeile Ipython (oder durch In-Browser-Python-Konsole namens Jupyter Notizbuch):

Im [1]: %load_ext Cython Im [2]: %%Cython  ...: def f(n):  ...:  a = 0  ...:  zum i in Angebot(n):  ...:  a += i  ...:  Rückkehr a  ...:   ...: CPDEF g(int n):  ...:  CDEF lang a = 0  ...:  CDEF int i  ...:  zum i in Angebot(n):  ...:  a += i  ...:  Rückkehr a  ...:  Im [3]: %Zeitlinge f(1000000) 10 Schleifen, Beste von 3: 26,5 Frau pro Schleife Im [4]: %Zeitlinge g(1000000) 1000 Schleifen, Beste von 3: 279 µs pro Schleife 

Dies gibt eine 95-fache Verbesserung gegenüber der reinen Python-Version. Weitere Details zum Thema auf der offiziellen QuickStart -Seite.[19]

Verwendet

Cython ist besonders beliebt bei wissenschaftlichen Nutzern von Python,[11][20][21] wo es "das perfekte Publikum" nach Python -Schöpfer hat Guido van Rossum.[22] Von besonderer Bedeutung:

  • Das gratis Software Sagemath Das Computeralgebra -System hängt von Cython sowohl für die Leistung als auch für die Schnittstelle mit anderen Bibliotheken ab.[23]
  • Bedeutende Teile der wissenschaftlichen Computerbibliotheken Scipy, Pandas und Scikit-Learn sind in Cython geschrieben.[24][25]
  • Einige hochverfielste Websites wie Quora Verwenden Sie Cython.[26]

Die Domäne von Cython ist nicht nur auf numerische Computing beschränkt. Zum Beispiel wird das LXML XML -Toolkit hauptsächlich in Cython geschrieben, und wie sein Vorgänger Pyrex wird Cython verwendet, um Python -Bindungen für viele C- und C ++ - Bibliotheken wie die Messaging -Bibliothek bereitzustellen ZeroMQ.[27] Cython kann auch zur Entwicklung verwendet werden Parallelprogramme zum Multi-Core-Prozessor Maschinen; Diese Funktion nutzt die OpenMP Bibliothek.

Siehe auch

Verweise

  1. ^ Behnel, Stefan (2008). "Der Cython-Compiler für C-Extensions in Python". Europython (28. Juli 2007: Offizieller Cython -Start). Vilnius/lietuva.
  2. ^ "Release 0.29.30".
  3. ^ Cython Changelog, Cython, 31. Juli 2022, abgerufen 31. Juli 2022
  4. ^ "Sprachgrundlagen - Cython 3.0.0a9 Dokumentation". cython.readthedocs.io. Abgerufen 9. September 2021.
  5. ^ "Cython - Ein Überblick - Cython 0.19.1 Dokumentation". Docs.cython.org. Abgerufen 21. Juli 2013.
  6. ^ Smith, Kurt (2015). Cython: Ein Leitfaden für Python -Programmierer. O'Reilly Media. ISBN 978-1-4919-0155-7.
  7. ^ "3,0 Meilenstein · Cython/Cython". GitHub. Abgerufen 26. März 2022.
  8. ^ "Grundes Tutorial - Cython 3.0A6 -Dokumentation". cython.readthedocs.io. Abgerufen 11. Dezember 2020.
  9. ^ Oliphant, Travis (20. Juni 2011). "Technische Entdeckung: Beschleunigen von Python (Numpy, Cython und Weave)". TechnicalDiscovery.blogspot.com. Abgerufen 21. Juli 2013.
  10. ^ Behnel, Stefan; Bradshaw, Robert; Citro, Craig; Dalcin, Lisandro; Seljebotn, dag sverre; Smith, Kurt (2011). "Cython: Das Beste aus beiden Welten". Computing in Wissenschaft und Ingenieurwesen. 13 (2): 31–39. Bibcode:2011cse .... 13b..31b. doi:10.1109/MCSE.2010.118. S2CID 14292107.
  11. ^ a b Seljebot, Dag Sverre (2009). "Schnelle numerische Berechnungen mit Cython". Proceedings of the 8. Python in Science Conference (Scipy 2009): 15–22.
  12. ^ Wilbers, ich.; Langtangen, H. P.; Ødegård, Å. (2009). B. Skallerud; H. I. Andersson (Hrsg.). "Verwenden Sie Cython, um numerische Python -Programme zu beschleunigen" (PDF). Verfahren von Mekit'09: 495–512. Abgerufen 14. Juni 2011.
  13. ^ "Wrapper -Benchmarks für mehrere Python -Wrapper -Generatoren (außer Cython)". Archiviert von das Original am 4. April 2015. Abgerufen 28. Mai 2010.
  14. ^ "Wrapper -Benchmarks für Cython, Boost.Python und Pybindgen". Archiviert von das Original am 3. März 2016. Abgerufen 28. Mai 2010.
  15. ^ "Cython: C-Extensions für Python". Abgerufen 22. November 2015.
  16. ^ "Unterschiede zwischen Cython und Pyrex".
  17. ^ Ewing, Greg (21. März 2011). "Re: VM- und Sprachgipfel -Informationen für diejenigen, die nicht bei Pycon (und diejenigen, die es sind!)" (Nachricht an die elektronische Mailingliste Python-dev). Abgerufen 5. Mai 2011.
  18. ^ Sagt Sage und Cython -Entwickler Robert Bradshaw auf der Sage Days 29 Conference (22. März 2011). "Cython: Vergangenheit, Gegenwart und Zukunft". youtube.com. Archiviert vom Original am 21. Dezember 2021. Abgerufen 5. Mai 2011.
  19. ^ "Cython -Code bauen". cython.readthedocs.io. Abgerufen 24. April 2017.
  20. ^ "Inscight: The Scientific Computing Podcast" (Episode 6). Archiviert von das Original am 10. Oktober 2014. Abgerufen 29. Mai 2011.
  21. ^ Millman, Jarrod; Aivazis, Michael (2011). "Python für Wissenschaftler und Ingenieure". Computing in Wissenschaft und Ingenieurwesen. 13 (2): 9–12. Bibcode:2011cse .... 13b ... 9m. doi:10.1109/MCSE.2011.36.
  22. ^ Guido van Rossum (21. März 2011). "Re: VM- und Sprachgipfel -Informationen für diejenigen, die nicht bei Pycon (und diejenigen, die es sind!)" (Nachricht an die elektronische Mailingliste Python-dev). Abgerufen 5. Mai 2011.
  23. ^ Erocal, Burcin; Stein, William (2010). Das SAGE -Projekt: Einheitliche kostenlose mathematische Software für eine praktikable Alternative zu Magma, Maple, Mathematica und Matlab erstellt (PDF). Mathematische Software 'ICMS 2010. Vorlesungsnotizen in Informatik. Vol. 6327. Springer Berlin / Heidelberg. S. 12–27. Citeseerx 10.1.1.172.624. doi:10.1007/978-3-642-15582-6_4. ISBN 978-3-642-15581-9.
  24. ^ "Scipy 0.7.2 Versionsnotizen".
  25. ^ Pedregosa, Fabian; Varoquaux, Gaël; Gramfort, Alexandre; Michel, Vincent; Thirion, Bertrand; Grisel, Olivier; Blondel, Mathieu; Prettenhofer, Peter; Weiss, Ron; Dubourg, Vincent; Vanderplas, Jake; Passos, Alexandre; Cournapeau, David (2011). "Scikit-Learn: maschinelles Lernen in Python". Journal of Machine Learning Research. 12: 2825–2830. Arxiv:1201.0490.
  26. ^ "Läuft Quora immer noch auf Pypy?".
  27. ^ "Ømq: Python -Bindung".

Externe Links