Hat der Python 3-Interpreter ein JIT-Feature?

Ich habe festgestellt, dass, wenn ich etwas mehr nach Python frage, Python nicht meine Maschine Ressource bei 100% und es ist nicht wirklich schnell, es ist schnell, wenn im Vergleich zu vielen anderen interpretierten Sprachen, aber im Vergleich zu kompilierten Sprachen Ich denke, dass der Unterschied ist Wirklich bemerkenswert

Es ist möglich, die Dinge mit einem JIT-Compiler in Python 3 zu beschleunigen?

Normalerweise ist ein JIT-Compiler das einzige, was die Leistung in interpretierten Sprachen verbessern kann, also beziehe ich mich auf diese, wenn andere Lösungen verfügbar sind, würde ich gerne neue Antworten akzeptieren.

7 Solutions collect form web for “Hat der Python 3-Interpreter ein JIT-Feature?”

Zuerst ist Python 3 (.x) eine Sprache, für die es eine beliebige Anzahl von Implementierungen geben kann. Okay, bis zum heutigen Tag keine Umsetzung außer CPython tatsächlich implementiert diese Versionen der Sprache. Aber das wird sich ändern (PyPy holt auf).

Um die Frage zu beantworten, musst du fragen: CPython, 3.x oder sonst, nicht, niemals, und wahrscheinlich niemals, einen JIT-Compiler enthalten. Einige andere Python-Implementierungen (PyPy nativ, Jython und IronPython durch die Wiederverwendung von JIT-Compilern für die virtuellen Maschinen, auf denen sie aufbauen) haben einen JIT-Compiler. Und es gibt keinen Grund, warum ihre JIT-Compiler aufhören würden, wenn sie Python 3-Unterstützung hinzufügen.

Aber während ich hier bin, lass mich auch ein Missverständnis ansprechen:

Normalerweise ist ein JIT-Compiler das einzige, was die Leistungen in interpretierten Sprachen verbessern kann

Das ist nicht richtig. Ein JIT-Compiler, in seiner grundlegendsten Form, entfernt nur Dolmetscher Overhead, die für einige der verlangsamen Sie sehen, aber nicht für die Mehrheit. Ein guter JIT-Compiler führt auch eine Vielzahl von Optimierungen durch, die den Overhead entfernen, der für die Implementierung zahlreicher Python-Features im Allgemeinen erforderlich ist (durch Erkennung von Sonderfällen, die eine effizientere Implementierung ermöglichen), herausragende Beispiele für dynamische Typisierung, Polymorphismus und verschiedene introspektive Merkmale.

Nur die Implementierung eines Compilers hilft dabei nicht. Sie brauchen sehr kluge Optimierungen, von denen die meisten nur in sehr spezifischen Umständen und für ein begrenztes Zeitfenster gültig sind. JIT-Compiler haben es hier einfach, weil sie bei der Laufzeit einen spezialisierten Code erzeugen können (es ist ihr ganzer Punkt), kann das Programm einfacher (und genauer) analysieren, indem man es beobachtet, wie es läuft, und kann Optimierungen rückgängig machen, wenn sie ungültig werden. Sie können auch mit Dolmetschern interagieren, im Gegensatz zu vor der Zeit Compiler, und oft tun, weil es eine vernünftige Design Entscheidung ist. Ich denke, das ist der Grund, warum sie mit Dolmetschern in den Köpfen der Menschen verknüpft sind, obwohl sie unabhängig voneinander existieren können.

Es gibt auch andere Ansätze, die Python-Implementierung schneller zu machen, abgesehen von der Optimierung des Interpreter-Codes selbst – zum Beispiel das HotPy (2) -Projekt. Aber die sind derzeit in der Forschung oder Experimentierstadium, und sind noch zu zeigen, ihre Wirksamkeit (und Reife) wrt realen Code.

Und natürlich hängt die Leistung eines bestimmten Programms von dem Programm selbst viel mehr ab als die Sprachimplementierung. Die Sprachimplementierung setzt nur eine obere Grenze für, wie schnell Sie eine Folge von Operationen machen können. Im Allgemeinen können Sie die Leistung des Programms besser verbessern, indem Sie einfach unnötige Arbeiten vermeiden, dh durch Optimierung des Programms. Dies gilt unabhängig davon, ob Sie das Programm über einen Dolmetscher, einen JIT-Compiler oder einen Vor-Ort-Zeit-Compiler ausführen. Wenn Sie etwas schnell werden wollen, gehen Sie nicht aus dem Weg, um eine schnellere Sprachimplementierung zu bekommen. Es gibt Anwendungen, die mit dem Overhead der Interpretation und Dynamik unmöglich sind, aber sie sind nicht so üblich wie man denkt (und oft gelöst durch den Aufruf in Maschinencode-kompilierten Code selektiv).

Die einzige Python-Implementierung, die einen JIT hat, ist PyPy . Byt – PyPy ist eine Python 2 Implementierung, keine Python 3 Implementierung. Sie könnten den Python 3 Port unterstützen .

Das Numba-Projekt sollte auf Python 3 arbeiten. Obwohl es nicht genau das ist, was du gefragt hast, kannst du es mal ausprobieren: https://github.com/numba/numba/blob/master/docs/source/doc/userguide .rst

Es unterstützt nicht alle Python-Syntax zu diesem Zeitpunkt.

Sie können versuchen, die pypy py3 Zweig , die mehr oder weniger python kompatibel ist, aber die offizielle CPython Umsetzung hat keine JIT.

Dies wird am besten von einigen der bemerkenswerten Python-Entwickler-Leute auf dieser Website beantwortet werden.

Immer noch möchte ich kommentieren: Bei der Diskussion über die Geschwindigkeit der interpretierten Sprachen, ich liebe einfach auf ein Projekt gehostet an diesem Ort: Computer Language Benchmarks Spiel

Es ist eine Website gewidmet laufen Benchmarks. Es gibt bestimmte Aufgaben zu tun. Jeder kann eine Lösung in seiner bevorzugten Sprache einreichen und dann die Tests vergleichen die Laufzeit jeder Lösung. Lösungen können Peer-Review, werden oft weiter von anderen verbessert, und die Ergebnisse werden gegen die Spezifikation überprüft. Auf lange Sicht ist dies das schönste Benchmarking-System, um verschiedene Sprachen zu vergleichen.

Wie Sie aus indikativen Zusammenfassungen wie diesem sehen können , sind kompilierte Sprachen ziemlich schnell im Vergleich zu interpretierten Sprachen. Allerdings ist der Unterschied wahrscheinlich nicht so sehr in der genauen Art der Kompilation, es ist die Tatsache, dass Python (und die anderen in der Grafik langsamer als Python) voll dynamisch sind. Gegenstände können kurzfristig verändert werden. Typen können on the fly geändert werden. So muss eine Artprüfung auf Laufzeit verzögert werden, anstatt Zeit zu kompilieren.

Also, während Sie über Compiler Vorteile streiten können, müssen Sie berücksichtigen, dass es verschiedene Funktionen in verschiedenen Sprachen gibt. Und diese Features können zu einem intrinsischen Preis kommen.

Schließlich, wenn man über Geschwindigkeit spricht: Am häufigsten ist es nicht die Sprache und die wahrgenommene Langsamkeit einer Sprache, die das Problem verursacht, es ist ein schlechter Algorithmus. Ich musste niemals Sprachen wechseln, weil man zu langsam war: Wenn es in meinem Code ein Geschwindigkeitsproblem gibt, repariere ich den Algorithmus. Allerdings, wenn es zeitaufwändige, rechnerisch intensive Schleifen in Ihrem Code gibt es in der Regel die Mühe wert, diese zu kompilieren. Ein prominentes Beispiel sind Bibliotheken, die in C von Skriptsprachen codiert sind (Perl XS libs, oder zB numpy / scipy für Python, lapack / blas sind Beispiele für libs, die mit Bindungen für viele Skriptsprachen verfügbar sind)

Wenn du JIT wie in Just in time Compiler zu einer Bytecode-Darstellung meinst, dann hat es ein solches Feature (seit 2.2). Wenn du meinst, JIT zu Code, dann nein. Dennoch bietet die Zusammenstellung zu Byte-Code eine große Leistungsverbesserung. Wenn du es willst, um Code zu kompilieren, dann ist Pypy die Implementierung, die du suchst.

Hinweis: pypy funktioniert nicht mit Python 3.x

Wenn Sie nach Geschwindigkeit Verbesserungen in einem Codeblock suchen, dann können Sie einen Blick auf rpythonic , die kompiliert, um C mit pypy kompiliert. Es verwendet einen Dekorateur, der es in einem JIT für Python umwandelt.

  • Was macht Python-Optimierung (-O oder PYTHONOPTIMIZE)?
  • ImportError: DLL-Last fehlgeschlagen: beim Importieren von Statsmodellen [Duplizieren]
  • Überprüfen Sie auf die Veränderlichkeit in Python?
  • Wiederholen Sie mit dem PyQt QWebKit wiederholt auf den Grund einer Seite
  • Finden Sie die aktuelle Position des Cursors in der Python-Schildkröte
  • Konvertieren einer Liste / Tupel von int-Strings zu int
  • Verknüpfen von Pandas datetime
  • Ich versuche, Proxies mit regex python aus einer Webseite zu bekommen
  • Tkinter-Tastenbefehle mit Lambda in Python
  • Durchschnittliche Anzahl von Zeichen pro Wort in einer Liste
  • Hinzufügen von optionalen Parametern zu den Konstruktoren von mehrfach vererbten Unterklassen von eingebauten Typen?
  • Python ist die beste Programmiersprache der Welt.