Ich mache eine Anwendung, die eine oder mehrere Datenreihen mit verschiedenen Algorithmen (Agenten) analysiert. Ich kam zu der Idee, dass jeder dieser Agenten als separate Python-Skripte implementiert werden könnte, die ich entweder mit der Python C-API oder Boost.Python in meiner App ausführe.
Ich mache mir ein bisschen Sorgen wegen der Laufzeit-Overhead-TBH, da ich eine ziemlich schwere Datenverarbeitung durchführe und ich nicht für jede Simulation mehrere Minuten warten muss. Ich werde in der Regel Hunderttausende, wenn nicht Millionen von Iterationen machen, in denen ich die externen "Agenten" anrufe; bin ich besser, nur alles in der App hardcoding, oder wird der Leistungsabfall erträglich sein?
Gibt es noch andere interpretierte Sprachen, die ich außer Python verwenden kann?
Ja, Tonnen. Lua und Python scheint am beliebtesten zu sein:
Einbetten von Lua
Einbetten von Python
Einbettung von Tcl
Einbetten von Ruby
Perl einbetten
JavaScript einbinden
Es gibt Dutzende von JavaScript-Engines, dies ist nur ein Beispiel. Einige von ihnen sind auch erschreckend schnell.
Ich werde in der Regel Hunderttausende, wenn nicht Millionen von Iterationen machen, in denen ich die externen "Agenten" anrufe.
Der Leistungsabfall wird spürbar, vielleicht schmerzhaft. Wenn Sie die Daten in Arrays einfügen und sie mit NumPy stapelweise verarbeiten können, sollte es viel schneller sein.
NumPy macht es millionenfach möglich, arithmetische Berechnungen durchzuführen. Zum Beispiel ist das Quadrieren jedes Elements eines Arrays wie folgt:
%Vor%Super einfach, und die enge innere Schleife hier ist tatsächlich in C implementiert.
Natürlich kann NumPy auch fortgeschritteneres Zahlen-Knirschen machen.
Bei Millionen von Aufrufen (von mir nehme ich C ++ an, weil du Boost erwähnt hast) in Python, ja: Du wirst einen Leistungseinbruch bemerken. Dies kann wichtig sein oder auch nicht - vielleicht wäre der Geschwindigkeitsgewinn beim Ausprobieren neuer "Agenten" größer als der Treffer. Python hat schnelle numerische Bibliotheken (wie zB numpy), die helfen könnten, aber Sie werden immer noch Overhead für das Marshalling von Daten, das Aufrufen von Python, der Gil usw. erleiden.
Ja, Sie können viele andere Sprachen einbetten: Schauen Sie sich lua an. Sieh dir auch swig.org an, das neben Python auch viele andere Sprachen erreichen kann.
Sie könnten wahrscheinlich eine eingebettete Sprache mit C ++ - Vorlagen und Operatorenüberladung erstellen, siehe z. B. Ublas- oder Ftensor-Matrixsprachen. Ich denke nicht, dass Python oder andere interpretierte Sprachen von Numbercrunching / Datenverarbeitung geeignet sind.
Tags und Links python c++ perl performance lua