2009-04-29 11 views
64

Ich dachte immer, dass Pythons Vorteile die Code-Lesbarkeit und die Entwicklungsgeschwindigkeit sind, aber die Zeit und die Speichernutzung waren nicht so gut wie die von C++.Ist Python schneller und leichter als C++?

These stats fiel mir sehr schwer.

Was sagen Ihre Erfahrungen über Python vs C++ Zeit und Speicherverbrauch?

+14

Also Python ist für die meisten dieser Fälle langsamer und verwendet mehr RAM, aber die Quelle ist kleiner. Was genau ist das Problem? – nuriaion

+2

Ich vermute ich habe die Ergebnisse falsch interpretiert. – Alex

+4

Was wirklich interessant ist, ist, dass die C++ - Tests immer noch "besser" sind als die C-Tests! – gbjbaanb

Antwort

177

Ich denke, du liest diese Statistiken falsch. Sie zeigen, dass Python bis zu 400 mal langsamer ist als C++ und mit Ausnahme eines einzigen Falles ist Python eher ein Speicherfresser. Wenn es jedoch um die Quellgröße geht, gewinnt Python sofort.

Meine Erfahrungen mit Python zeigen den gleichen eindeutigen Trend, dass Python in der Größenordnung zwischen 10 und 100 mal langsamer als C++ ist, wenn Sie eine ernsthafte Zahlenverarbeitung durchführen. Dafür gibt es viele Gründe, die wichtigsten sind: a) Python wird interpretiert, während C++ kompiliert wird; b) Python hat keine Primitive, alles einschließlich der eingebauten Typen (int, float usw.) sind Objekte; c) Eine Python-Liste kann Objekte unterschiedlichen Typs enthalten, so dass jeder Eintrag zusätzliche Daten über seinen Typ speichern muss. All dies beeinträchtigt sowohl die Laufzeit als auch den Speicherverbrauch erheblich.

Dies ist jedoch kein Grund, Python zu ignorieren. Eine Menge Software benötigt nicht viel Zeit oder Speicher, auch nicht mit dem 100-Zeit-Slow-Faktor. Entwicklungskosten sind, wo Python mit dem einfachen und prägnanten Stil gewinnt. Diese Verbesserung der Entwicklungskosten überwiegt oft die Kosten zusätzlicher CPU- und Speicherressourcen. Wenn dies jedoch nicht der Fall ist, gewinnt C++.

+82

Auch Leute, die davon sprechen, dass Python langsam für ernstes Zahlenknirschen ist, haben die Module von Numpy und Scipy nicht verwendet. Python entwickelt sich heutzutage wirklich im wissenschaftlichen Rechnen. Natürlich kommt die Geschwindigkeit von der Verwendung von Modulen, die in C geschrieben sind, oder Bibliotheken, die in Fortran geschrieben wurden, aber das ist meiner Meinung nach das Schönste einer Skriptsprache. –

+2

Ich glaube, was Sie gesagt haben, und das ist ein Link, um es zu beweisen: http://blog.dhananjaynene.com/2008/07/performance-comparison-c-java-python-ruby-jython-jruby-groovy/ – ucefkh

+2

Betreffend: * c) Eine Python-Liste kann Objekte unterschiedlichen Typs enthalten, so dass jeder Eintrag zusätzliche Daten über seinen Typ speichern muss. * Die Python-Liste ist wirklich eine Liste von Zeigern auf Objekte. In Python ist es der Wert, der seinen Typ kennt, während die Variable nur ein Zeiger auf das "generische Wertobjekt" ist (daher sind gerade Zahlen unveränderlich). Listen speichern also nicht die Arten ihrer Inhalte - nur Zeiger. Sie haben jedoch Recht mit dem Speicheraufwand - Python muss den Typ und anderen Kontext für Werte eines beliebigen Typs speichern. – Alex

22

Meine Erfahrung ist die gleiche wie die Benchmarks. Python kann langsam sein und benötigt mehr Speicher. Ich schreibe viel, viel weniger Code und es funktioniert das erste Mal mit viel weniger Debugging. Da es den Speicher für mich verwaltet, muss ich keine Speicherverwaltung vornehmen und so Stunden sparen, um Kernlecks zu finden.

Was ist Ihre Frage?

+0

Ich war einfach verwirrt von den Ergebnissen der Benchmarks. Es stellte sich heraus, dass ich sie falsch interpretierte. – Alex

2

Ich denke, dass diese Statistiken zeigen, dass Python viel langsamer ist und mehr Speicher für diese Benchmarks verwendet - sind Sie sicher, dass Sie sie richtig lesen?

Nach meiner Erfahrung, die hauptsächlich mit dem Schreiben von netzwerk- und dateisystemgebundenen Programmen in Python zusammenhängt, ist Python in keiner Weise wesentlich langsamer. Für diese Art von Arbeit überwiegen die Vorteile die Kosten.

+0

Tatsächlich. Wenn Leistung ein Problem ist, was Python gut ist, ist die Verbindung von leistungsstarken externen Modulen, oder Prototyping des Systems und dann ermöglicht die Engpässe (in der Regel tief in einer inneren Schleife) umgeschrieben werden als ein C-Modul usw. – xan

11

Die Quellgröße ist nicht wirklich eine sinnvolle Maßnahme. Zum Beispiel ist das folgende Shell-Skript:

ist viel kürzer als entweder seine Python oder C++ Entsprechungen.

+29

Und viel einfacher zu Beachten Sie auch die längeren Python- oder C++ - Versionen. Ich argumentiere, dass die Größe des Quellcodes wichtig ist, und für bestimmte einfache Aufgaben sind knappe Shell-Skripte gut. –

+1

Das ist ein guter Punkt. –

+0

Ich glaube auch, dass die Größe des Quellcodes sehr wichtig ist, und für einige Aufgaben ist Bash das richtige Werkzeug für den Job. Sehen Sie sich ein schönes Beispiel an, in dem Sie ein einfaches Bash-Skript mit Python vergleichen: http://innolitics.com/articles/programming-languages/#what-makes-programming-languages- different (Sie müssen etwas runterscrollen). Ich denke, es ist ein etwas raffinierteres Beispiel als "Katzenfuß". – jdg

6

Auch: Psyco vs. C++.

Es ist immer noch ein schlechter Vergleich, da niemand das zahlenkrachige Zeug tun würde, auf das sich Benchmarks in reinem Python konzentrieren. Ein besserer wäre es, die Leistung von realistischen Anwendungen oder C++ gegenüber NumPy zu vergleichen, um eine Idee zu bekommen, ob Ihr Programm merklich langsamer wird.

+1

mit anderen Worten - da numecrunchy Zeug ist so viel langsamer schreibe es in C++ und rufen Sie es aus Python :-) – igouy

97

Alle langsamsten (> 100x) Anwendungen von Python beim Shootout sind wissenschaftliche Operationen, die eine hohe GFlop/s-Zählung erfordern. Sie sollten Python für diese sowieso nicht verwenden. Die korrekte Methode, Python zu verwenden, besteht darin, ein Modul zu importieren, das diese Berechnungen durchführt, und anschließend einen entspannten Nachmittag mit Ihrer Familie zu verbringen.Das ist ist der Pythonic :)

+2

Heutzutage gibt es mehrere [Python-zu-C++ - Compiler] (https://stackoverflow.com/questions/4650243/ convert-python-program-to-cc-code), so dass Python in einigen Fällen so schnell wie C++ sein kann. –

3

Das Problem hier ist, dass Sie zwei verschiedene Sprachen haben, die zwei verschiedene Probleme lösen ... es ist wie Vergleichen von C++ mit Assembler.

Python ist für schnelle Anwendungsentwicklung und für, wenn die Leistung ein minimales Anliegen ist.

C++ ist nicht für schnelle Anwendungsentwicklung und erbt ein Vermächtnis der Geschwindigkeit von C - für Low-Level-Programmierung.

2

Es ist das gleiche Problem mit verwalteten und einfach zu bedienenden Programmiersprache wie immer - sie sind langsam (und manchmal Speicher-essen).

Hierbei handelt es sich um Sprachen, die eher die Kontrolle als die Verarbeitung übernehmen. Wenn ich eine Anwendung schreiben müsste, um Bilder zu transformieren und Python zu verwenden, könnte die gesamte Verarbeitung in C++ geschrieben und über Bindungen mit Python verbunden werden, während die Schnittstellen- und Prozesssteuerung definitiv Python wäre.