Login
Login-Name Passwort


 
Newsletter
Werbung

Thema: PyPy v5.9 unterstützt NumPy und Pandas

29 Kommentar(e) || Alle anzeigen ||  RSS || Kommentieren
Kommentare von Lesern spiegeln nicht unbedingt die Meinung der Redaktion wider.
0
Von Robmaster_1 am Fr, 6. Oktober 2017 um 11:12 #

PyPy ist python in schnell. Auch pip wird unterstützt. Obwohl Pypy3 noch im Betastadium ist, funktioniert es für meine Zwecke (Flask) recht gut. In Kombination mit cython oder Numba sehr zu empfehlen.

0
Von sdadasdassa am Fr, 6. Oktober 2017 um 13:24 #

Bevor hier Manche anfangen von schnellem Python zu träumen spiele ich mal den Spielverderber um die Lahmarschigkeit solcher Sprachen in ein ehrliches Licht zu stellen. Nur damit dann keiner von euch sagt, dass man euch in Unwissenheit gelassen hat.

Hinweis: Geschwindigkeit einer Sprache sollte am besten in mehreren Szenarien getestet werden. Es sollte auch ein öffentlicher Benchmark sein, damit Jeder beitragen kann. Nur wenn das jeweilige Programm nach allen Regeln der Kunst optimiert ist, kann man einen Benchmark als sinnvoll bezeichnen. Daher sind viele Paper die Sprachen und ihre Geschwindigkeiten vergleichen einfach nur Unsinn.

Zum Glück gibt es mittlerweile eine gute Suite, so dass hier jetzt Keiner piensen kann. Falls also Jemand besser optimieren kann, sollte Derjenige seinen Senf in den Benchmark einbinden. Hier ist der Link: https://benchmarksgame.alioth.debian.org/

Vergleichen wir mal C gegen Python (beschwert euch für die schlechte Formatierung beim Admin):

Die Zeit ist jeweils in Sekunden.
Algorithm...................C......Python.....Factor
binary-trees.............2,38.....86,90.....36,51
fannkuch-redux.........8,97....483,79.....53,93
fasta.......................1,33.....110,91.....83,39
k-nucleotide.............5,38......84,73......15,75
mandelbrot...............1,65.....273,43....165,72
n-body....................9,96.....787,02......79,02
pidigits.....................1,73......3,51........2,03
regex-redux..............1,45.....14,86......10,25
reverse-complement...0,42......2,82........6,71
spectral-norm...........1,99....188,83.......94,89

Selbst bei einfachem Mittelwert gibt es zwischen Python und C einen Faktor von 50 (!) Willkommen in der Realität von JIT und VM Sprachen :evil:

Nun wird oft und gerne von der PyPy Geschwindigkeit geträumt... Alles wäre schön und gut wenn es da nicht ehrliche Benchmarks gäbe. Einer davon ist diese Seite: https://pybenchmarks.org/

Im Schnitt ist PyPy nur etwa 5-8 mal schneller als plain Python. Sagen wir mal Faktor 10, weil heute Freitag ist und ich Spendierhosen anhabe und die Demütigung sonst unerträglich blieb. Damit ist Python immer noch 5 (!) mal langsamer als C oder C++.

Das sind 500 beschissene Prozent.

Wie ist es in Kontext zu bringen? Kommt stark auf die Anwendung an. Wenn man ein nutzloser Hobbyprogrammierer für "simple" Programme ist oder einfach nur programmieren lernen möchte ist Python richtig klasse. Bei sehr aufwändigen Anwendungen ist Python tatsächlich nicht zu gebrauchen. Nicht nur weil es an Tools wie einer anständigen IDE mangelt, so dass man wie im letzten Jahrtausend im Jupyter Notebook mit PRINTF debuggen muss. Man muss auch noch extremen Optimierungsaufwand betreiben um nicht 10 mal so lahm zu sein, sondern nur 5 oder 4?

Lasst es euch auf der Zunge zergehen: Anstatt eines Tages würde man zwei Wochen rechnen müssen.

Es gibt zwar Grafikkarten, aber nicht jedes Programm performt darauf besser. Außerdem werden Grafikkarten mit einem C ähnlichen Dialekt programmiert ;)

Just my 5 cents um euch die Träumer vom Hals zu schaffen :x

  • 1
    Von homer am Fr, 6. Oktober 2017 um 14:31 #

    Danke für diesen ausführlichen und informativen Kommentar. Ich habe jetzt gelernt, dass Python-Code zwischen 5 und 165 mal langsamer läuft, als C-Code.

    Ich benutze übrigens Python, weil ich damit meine numerischen Berechnungsprobleme zwischen 50 und 2000 mal schneller löse, als mit C. Das könnte daran liegen, dass Python mit "batteries included" daher kommt. Evt aber auch daran, dass ich von C nicht die geringste Ahnung habe :)

    • 0
      Von sdadasdassa am Fr, 6. Oktober 2017 um 14:41 #

      > Ich benutze übrigens Python, weil ich damit meine numerischen Berechnungsprobleme zwischen 50 und 2000 mal schneller löse, als mit C.

      Poste mal den Code dann werden wir sehen wo dein Fehler ist :-) Exakt aus diesem Grund habe ich nur öffentlich anekannte Benchmarks zitiert und nicht persönliche Meinungen.

      • 1
        Von homer am Fr, 6. Oktober 2017 um 15:08 #

        nur damit wir uns richtig verstehen: Mir ist es relativ schnuppe, wie schnell der Code auf der CPU ausgeführt wird. Der Flaschenhals ist das Programmieren selbst. Beispiel: Eine nicht-lineare "Least-Squares Minimization" mit anschließendem Kurven-Fitting ist mit wenigen Zeilen Python-Code erledigt. Wenn das Fitting eines Datensatzes dann statt 0.001 Sekunden (mit C) 0.2 Sekunden (mit Python) dauert - who cares. Rechenzeit ist im Vergleich zu Progammierzeit viel billiger. (Ja, ich weiss: Für Number-Crunching und Big Data gilt das nicht.)

        • 0
          Von sbsjsjsjs am Fr, 6. Oktober 2017 um 16:03 #

          > Mir ist es relativ schnuppe

          So sieht es nämlich aus. Was auch okay ist. Es hätte sich keiner beschwert, wenn du es gleich so geschrieben hättest.

          Man muss dazu sagen, ein Kurvenfit ein schlechtes Beispiel ist da es so gut wie in jeder Sprache implementiert und mit wenigen Zeilen erledigt ist. Nicht nur in Python. Das liegt aber eher daran, es konvexe Optimierung ist und einen einfachen Sonderfall darstellt. Es verwendet dennoch Matrizenmultiplikationen und ist per Definition O(n^3). Selbst mit Sparse Matrizen O(nnz) . Das heißt deine Aussage ist nur für einen kleinen Datensatz gültig. Bei größeren Datensätzen ist LSQ ohnehin nicht brauchbar.

          • 0
            Von homer am Fr, 6. Oktober 2017 um 17:05 #

            ja, das ist richtig. Bei großen Datensätzen und nicht-linearen numerischen Problemen spielen Code-Optimierung eine große Rolle. Man braucht nur mal den Unterschied von numpy und numpy-mkl (mit Intel Math Kernel Library) ausprobieren.
            Rechenintensive Anwendungen (z.B. Finite-Elemente-Methode) nutzen neben C übrigens auch die Fortran NAG Library. Niemand käme auf die Idee, den Rechenkern eines FEM-Programms in Python oder Java zu programmieren. Gleichwohl habe alle professionellen FEM-Programme eine Python-Schnittstelle. Eben aus dem Grund: Der User ist i.d.R. kein Software-Programmierer und benötigt eine einfache Möglichkeit, mal schnell in ein Post Processing oder eine automatische Parameter-Variation für hunderte von FE-Rechnungen durchzuführen. Ein paar Zeilen Python-Code erledigen das. Vielleicht kann das in C viel besser erledigt werden, nützt aber nichts, wenn der User kein C kann.
            Ein Ingenieur kann vielleicht nicht C-Programmieren, er weiss aber was "viel" bedeutet :-)

    0
    Von Robmaster_1 am Fr, 6. Oktober 2017 um 14:33 #

    Selten so ein Unsinn gelesen.
    1. Was hindert dich daran Python zu nutzen und Zeitkritische Methoden einfach nach C auszulagern. Das ist eine der Stärken von python (z.B mit cython) oder einfach in python zu programmieren und den Code dann mittels Numba und LLVM compiler auf die GPU zu schubsen.

    2. Im Backend ist Python schnell genug. Schön das du mit C dann 100000000 requests abarbeiten könntest, das wird dir aber nichts bringen wenn deine Internetleitung nur 40 Gbit bringt. Außerdem was kostet eine AWS-VM ? Nix.

    3. Die Entwicklungsgeschwindigkeit ist mit python wesentlich schneller als C. Außerdem ist das ganze auch noch sicherer und leichter zu debuggen, aber das kommt immer auf den Programmierer an.

    4. Batteries included. Python bringt eine menge an Modulen mit. Da können C Entwickler mit ihrer Standard Library nur von träumen. Die müssen das Rad jedes mal neu erfinden.

    Es geht immer um den Kosten/Nutzen Faktor und da ist in python in vielen Dingen besser geeignet als C.

    5. Schaue dir mal Sanic an. Auch in python kann man schnelle Programme schreiben.
    https://www.fullstackpython.com/sanic.html

    • 0
      Von sdadasdassa am Fr, 6. Oktober 2017 um 14:50 #

      1. Weil auch der grundlegende Kram lahm ist. GPU wurde auch angesprochen. Lern mal aufmerksam zu lesen.

      2. Python ist einfach, jedoch nicht schnell. Es kostet dich sage und schreibe 50 mehr AWS Maschinen. Beruhige dich und lies dir alles nochmal durch.

      3. Ich habe schon oben geschrieben, dass Python leichert zu lernen ist. Wozu schreibst du es nochmal? Sicherer und leichter zu debuggen? Achja, dann nenne mir doch mal ein Tool mit einer grafischen Oberfläche. Um Threads, Racing Conditions oder GPU zu debbugen. Richtig, gibt es nicht. Dein Hobbyprogramm kannst du einfach mit printf debuggen, das ist mir klar. Reale Beispiele bitte.

      4. Welches Modul fehlt dir? Nenne mir eins, das du nicht auch in C hast? Immer diese sinnlosen Aussagen ohne Beispiele. Nur dumme Programmierer schreiben alles neu. Das gilt nicht nur für Python.

      5. Ohne konkrete Benchmarks sind solche Aussagen sinnlos. Hast du das immer noch nicht verstanden?

      • 0
        Von Robmaster_1 am Fr, 6. Oktober 2017 um 15:11 #

        Du hast behauptet „außerdem werden Grafikkarten mit einem C ähnlichen Dialekt programmiert“ Das ist falsch.
        Du kennst nicht mal den Unterschied zwischen der Programmiersprache an sich sich und den später verwendeten Compiler/Interpreter. Wie ich schon mehrfach schrieb können Programme in Python Entwickelt jedoch dann kompiliert werden. Ich habe in keinem Satz geschrieben das python leicht zu erlernen sein, sondern nur das die Entwicklung damit schneller ist. Ach ja mit Pycharm kannst alles debuggen. Am besten ist aber die Frage „Welches Modul fehlt dir?“ Sorry ich kann mir kaum vorstellen das du jemals was programmiert hast. Aber bitte „Wie bauen eine Anwendung für Android. Du kannst das NDK nutzen und ich nutze das Java-SDK. Die Gui klicke ich mir in 1 Minute mit dem AndroidStudio zusammen. Dafür wirst du dann mindestens eine Woche in C brauchen, wenn du es überhaupt hinbekommst. Das war von dir ein schlechter Trollversuch.

        • 0
          Von sdadasdassa am Fr, 6. Oktober 2017 um 15:47 #

          Du hast schon gezeigt, dass du keine Ahnung hast. Mit jedem Post wird es schlimmer.

          Einfache Suchen würden dich vor deiner Dummheit bewahren. 99% aller GPU Programme sind in C in CUDA geschrieben. https://www.youtube.com/results?search_query=GPGPU+Programming

          >> Du kennst nicht mal den Unterschied zwischen der Programmiersprache an sich sich und den später verwendeten Compiler/Interpreter.

          Deine Gedankenwelst überhaupt nicht kohärent. Lass dich mal untersuchen.

          >> Ach ja mit Pycharm kannst alles debuggen.

          Nö eben nicht. Ich programmiere noch aktiv mit Python und kenne dessen Limitierungen. Du kannst in Python im Moment nur Basis-Debugging machen. Eine Lösung für alles gibt es nicht. Das kriegst du auf die Schnelle auch mit Google nicht zusammen. Man merkt, dass du nicht einmal ein aktiver Python programmierer bist. Lies doch den Stackoverflow post bevor du wieder die Leute desinformierst.

          >> Am besten ist aber die Frage „Welches Modul fehlt dir?“ Sorry ich kann mir kaum vorstellen das du jemals was programmiert hast.

          So sieht es nämlich immer bei dir aus. Du blubberst inkohärent vor dich hin ohne Beispiele zu nenne.

          >> Aber bitte „Wie bauen eine Anwendung für Android. Du kannst das NDK nutzen und ich nutze das Java-SDK. Die Gui klicke ich mir in 1 Minute mit dem AndroidStudio zusammen. Dafür wirst du dann mindestens eine Woche in C brauchen, wenn du es überhaupt hinbekommst. Das war von dir ein schlechter Trollversuch.

          Sag mal? Dir ist schon bewusst, dass die zusammenklickbaren GUIs schon lange in C++ gibt? Willst du dich noch mehr blamieren? Simple Suchen können helfen: https://www.youtube.com/watch?v=QCnyqMWPkQk

          • 0
            Von Robmaster_1 am Fr, 6. Oktober 2017 um 17:02 #

            Wie alt bist 12 ?
            Dir ist schon klar das du auch mit VisualStudio 2017 python programmieren kannst !
            Außerdem möchte ich sehen wie du ein AndroidApp in C++ zusammen klickst. Erst lesen dann verstehen. Nur weil am ende eine C file entsteht muss das aber ursprünglich nicht in C programmiert worden sein. Die Programmiersprache sagt nichts über die Geschwindigkeit aus. Auch Java kann man compilieren du noob.

      0
      Von sdadasdassa am Fr, 6. Oktober 2017 um 15:03 #

      Bin mal deinem Link gefolgt um kräftig zu lachen. So wird !!!! heute !!!! Python gedebuggt:

      https://howchoo.com/g/zgi2y2iwyze/debugging-your-python-code

      So habe ich das letzte mal in Basic zur Zeit von MS-DOS im letzten Jahrtausend gedebuggt.

      Falls es Jemand interessiert. So sah ein praxistauglicher Debugging-Prozess für mehrere Threads schon !!! 2012 !!! aus:

      https://youtu.be/ljmX74undOQ?t=2m19s

      Visual Studio 2017 und der Qt Creator können heute deutlich mehr.

      Junge du bist einfach nur lächerlich.

      0
      Von sdadasdassa am Fr, 6. Oktober 2017 um 15:08 #

      Ich war mir nicht sicher ob das ein Scherz war mit dem Debuggen und habe nach neueren Methoden geschaut um Python zu debuggen. Hier eine öffentliche Antwort und nicht die persönliche Meinung eines Fanboys:

      https://stackoverflow.com/questions/1118183/how-to-debug-in-django-the-good-way

      Es gibt tatsächlich kaum Möglichkeiten Python zu debuggen. Am schlimmsten sieht es beim Applitationsserver aus. Täglich Brot sozusagen. Da geht nur pdb.

      0
      Von SosoSucher am Fr, 6. Oktober 2017 um 18:14 #

      "Python bringt eine menge an Modulen mit. Da können C Entwickler mit ihrer Standard Library nur von träumen. "
      Auch da gibnt es unmengen an Bibliotheken.
      Da scheint ein Pythonverfechter hart getroffen worden zu sein.

    0
    Von Anonymous am Fr, 6. Oktober 2017 um 16:22 #

    Mal 'ne dumme Frage:

    Die schlechte Geschwindigkeit ist doch durch den langsamen Interpreter bedingt, oder?

    Warum gibt es keinen Compiler für Python; stehen dem technische Gründe entgegen oder wurde der nur nicht genug vermisst?

    • 0
      Von sdadasdassa am Fr, 6. Oktober 2017 um 16:48 #

      Das ist jetzt nicht unbedingt mein Gebiet aber ich würde vermuten, dass es an mehreren Gründen liegt.

      MATLAB ist auch eine Interpretersprache und läuft in Grundzügen sehr schnell. Ich spreche jetzt nicht von Funktionen, die intern FORTRAN und C Calls durchführen, sondern reinen nicht vektorisierten MATLAB Code. MMn ist es also nicht zwingend notwendig, dass Python 5 mal langsamer läuft. Overhead durch JIT, VM oder Ähnliches wird es aber wie schon bei Java zwar immer geben. Bloß ist dieser meiner Erfahrung nach bei weitem nicht so hoch. Dieser Umstand wird dank Etablierung von Clang, LLVM und co. in den letzten Jahren deutlich besser.

      Einige Interpreter sind intern mit C realisiert. So wie es meistens bei Java und Python ist. Das heißt per Definition, dass es nie schneller als C gehen wird. Allerdings wird es noch komplizierter, da die Standard Libraries, also alle zusätzlichen Funktionen, wiederrum in der eigenen Sprache sind. Also Python bzw. Java.

      Ein Performance-Fresser ist definitiv die Typlosigkeit. In C++ sind viele Fälle durch den Datentyp auto und Template-Metaprogrammierung abgefangen worden, die nicht wirklich typenlos sind. Der Typ wird da nur zur Compilierzeit bestimmt und bleibt fest. Ich spare mir mal hier den QVariant oder Boost.Variant.

      Dann wäre da der Overhead durch "Alles ist eine Klasse/Objekt/Liste/JSON" usw... Dadurch schleppen die Variablen jede Menge Informationen mit sich, ob sie gebraucht werden oder nicht. Polymorphie ist ohnehin ein Performance Fresser.

      Ich würde daher auf einen Mix aus Low-Level Optimierung, schlecht implementierter Funktionen und Extras für bequemere Programmierung tippen.

      • 0
        Von Roadrunner123 am Sa, 7. Oktober 2017 um 13:38 #

        "MATLAB ist auch eine Interpretersprache und läuft in Grundzügen sehr schnell."

        Danke, ich hab gelacht.

        Mathlab ist doch nur dazu da, Wissenschaftlern einfache mathematische Aufgaben Abzunehmen, welche C/C++ von Haus aus nicht zur Verfügung stellen - für die es inzwischen Bibliotheken gibt.
        Aber mehr ist es ebend nicht und schon gar nicht schnell.

        Ohne der automatischen Verwendung von CUDA/OpenCL im Hintergrund (seit 2015) wären die einfachen Matrizenoperationen schnarsch-langsam.
        Und auch hierbei mussten wir feststellen, dass dies zum Teil langsamer läuft als direkt auf der CPU, nur dass man keinen Einfluss darauf hat.

        Ich weiß wovon ich rede, ich als C/C++-Entwickler stehe jedem Tag rund 50 Mathlabliebhaber gegenüber. :-)

      0
      Von lin am Fr, 6. Oktober 2017 um 21:49 #

      Da gibt es mehrere Möglichkeiten, du kannst z.b dein Pythoncode schreiben und dann mit Java in Bytecode wandeln (jython) und das dann mit dem gcj kompilieren oder wie Rob schon schrieb einfach cython oder numba verwenden. Rob lass dich nicht von Erstsemestern ärgern :)

    0
    Von #! am Fr, 6. Oktober 2017 um 23:28 #

    Wer verschiedene Sprachen nur aufgrund ihrer Ausführungsgeschwindigkeit vergleicht, kann nicht verstanden haben, warum es überhaupt verschiedene Sprachen gibt und diese jeweils für verschiedene Probleme ein verschieden gutes Werkzeug sind.

    • 1
      Von sbsjsjsjs am Sa, 7. Oktober 2017 um 11:52 #

      Klar, wenn man danach geht, dann werden wir bald für jede kleine Nische eine eigene Sprache haben, die nichts besser kann als das was es schon längst gibt. Hauptsache was neues und eigenes. Der berühmt berüchtigte Open Source Diversitätskrebs. Schon jetzt sind die meisten Sprachen komplett ersetzbar und nur für einen neuen Polyglot Rekord nützlich. Sprachen wie Go, Rust und Swift wird es dann so gehen wie Objective C. Alles gelernte und geschriebene wird binnen kürzester Zeit nutzlos sein.

      Hinzu kommt, dass es so wie bei Python in den ersten 15 Jahren keine vernünftigen Toolkits gibt. Die Libraries sind grottenlahm und nicht vollständig.

      Aber die Linuxer haben ja naturgemäß höhere Leidensbereitschaft

      • 0
        Von Anonymous am Sa, 7. Oktober 2017 um 12:25 #

        Aha. Und was hat das genau mit OpenSource und Linux zu tun?

        0
        Von Gitstompah am Sa, 7. Oktober 2017 um 14:24 #

        Was für ein Unsinn!

        Sprachen wählt man nicht nur nach der "Performance" sondern auch nach der Aufgabe/Problem/Anwendung, und/oder was der Kunde vorgibt.

        Es ist nämlich schon ein Unterschied ob ich ein Programm z.B. in Python in 1h Stunde schreibe oder in zig Stunden in C.

        C erfordert dazu noch eine Menge an Disziplin um sauberen und vorallem "sicheren" Code abzuliefern. Nur an dieser "Disziplin" mangelt es den meisten C-Entwicklern.

    2
    Von NaJa am Sa, 7. Oktober 2017 um 14:18 #

    Wie man sich hier schon wieder befetzt und gegenseitig beleidigt, das ist echt letztklassig. Es gibt halt verschiedene Meinungen und Erfahrungen.
    Ich für meinen Teil habe schon mehrere große Projekte in Python umgesetzt. Gründe dafür sind dass man sehr schnell eine lauffähige Lösung hat und die Syntax genial ist. Man kann da gespaltener Meinung sein. Früher war ich auch sehr skeptisch gegenüber dem zwanghaften Einrücken und dachte dass Klammern ein viel besser sind. Je mehr ich in Python programmiert habe, desto mehr hat sich meine Meinung geändert. Seien wir uns doch ehrlich. Wie oft hat jeder Programmierer hier im Laufe seiner Zeit seinen Stiel geändert. Mal die Klammern in der gleichen Zeile, mal in der nächsten, mal eingerückt, mal drauf gesch...
    Bei Python gibt es das nicht. Da gibt es klare Regeln. Und das macht den Code ungemein leichter lesbar.
    Python hat auch einige Nachteile:
    - Wie oben schon erwähnt die Geschwindigkeit. ABER: Mit Standardbenchmarks kann man eine Sprache nur bedingt vergleichen. Wenn ich an die vielen Java-Programme in der Firma denke und deren Geschwindigkeit mit meinen Python-Programmen vergleiche, dann sehen die in Java geschriebenen Tools echt alt aus. Warum ist das so? Bei Java wird wie verrückt bis in das letzte Bit alles in eine Klasse gepfercht. Bei Python ist man in der Regel sehr schnell auf C-Ebene. Und dann geht die Post ab. Laut Standardbenchmarks ist Java aber nur 2mal langsamer als C... Wer's glaubt... Etwas Abhilfe schafft hier Cython. Wenn man die statischen Datentypen geschickt definiert, dann kann man im Optimalfall C-Geschwindigkeit erreichen.
    - Der GIL. Also das ist echt eine Krücke. Der GIL verhindert dass Python-Code parallel ausgeführt wird. Daher laufen nur Prozesse parallel, aber Threads nicht. Man kann mit etwas Geschick diese Problem minimieren, vor allem da Python mit dem Multiprozessing Modul viel Erleichterung schafft. Aber wirklich toll finde ich die Lösung dann auch nicht, da sehr viele Daten kopiert werden müssen. Und in Windoof wird es dann besonders schlimm, denn bei diesem grottigen OS gibt es kein fork. In Windoof kann allein das Initialiseren des Prozess Pools schon eine Weile dauern. Aber man kann sich auch hier etwas helfen indem man auf C-Module zurückgreift, die den GIL nicht benötigen und dann auch in einem Prozess wieder parallel laufen können.
    - Debuggen: Ja das ist manchmal problematisch. PyCharm ist als Entwicklungsumgebung echt toll. Nur gibt es auch hier Grenzen. z.B. wenn man mit sehr großen Datenmengen zu tun hat. Dann ist PyCharm gleich mal ziemlich überfordert wenn es zu einem Breakpoint kommt. Oder wenn bei einer Slot-Funktion in PyQt eine Exception auftritt, dann muss man diese gesondert abfangen, sonst geht die einfach unter. Oder wenn im JS in QML eine Exception auftritt, dann geht diese ebenfalls unter. Also hier gibt es durchaus Verbesserungsbedarf.
    - Ausführbare Datei mit Abhängigkeiten erstellen. Auch das kann fürchterlich kompliziert werden. Es gibt Py2Exe, Py2App, CxFreeze, PyInstaller (und Cython -> erstellt nur ausführbare Datei). Bei den verschiedenen Python Modulen gibt es leider viele Eigenheiten. Deshalb sind die genannten Tools auch entsprechend mit Hook-Funktionen aufgeblasen um diese richtig aufzulösen. Und selbst das reicht nicht immer. Man muss oft selbst noch Hand anlegen um ein ablieferbares Paket zu erhalten.
    Python ist eigentlich nur eine Scriptsprache in der man auf unterster Ebene C-Funktionen aufruft. Python ist nicht perfekt, aber sehr gut für eine schnelle SW-Entwicklung, solange es die gestellten Anforderungen erfüllen kann.
    Ich habe früher viel in C und C++ programmiert. Aber ich möchte nicht mehr zurück. In C hätte ich niemals meine Programme in dieser kurzen Zeit erstellen können und die Geschwindigkeit ist durchaus passabel.
    My 2 cents

    • 0
      Von devent am Mo, 9. Oktober 2017 um 19:34 #

      Wie kann man nur die Python Syntax als "genial" bezeichnen obwohl sie objektiv gesehen eine ziemlich schlechte Idee ist. Whitespace als Syntaxrelevant zu verwenden bringt Python so viele Nachteile, ohne dass es bedeutende Vorteile bringt. Python wird z.B. nie einen automatischen Formatter bekommen können. Ebenso sind größere Blöcke einfach nur unübersichtlich.

      Ich verwende Python nicht, aber ich muss immer Yaml in Kubernetes und OpenShift benutzten und da würde ich immer gerne verzweifeln wenn ich wiedermal die Einrückungen zählen muss. Klammern oder ein anderes Zeichen für Blöcke wären kein Beinbruch und man könnte das Zeichen sehen. Ein White-Space Zeichen kann man nicht sehen. Wer die Idee ein Zeichen dass man nicht sehen kann als Syntaxrelevant zu verwenden als "genial" bezeichnet, naja...

      Ja, es macht den Code "ungemein leichter lesbar" wenn man Zeichen in der Syntax verwendet die man nicht sehen kann.

      Mich persönlich kotzt es jedes mal an einen Parser-Fehler zu bekommen weil ich mich in der Yaml Datei in der Einrückung verzählt habe, oder, was wohl auch "genial" ist, wenn mein Mitarbeiter in einer Datei Space und in der anderen einen Tab benutzt und ich deswegen wieder noch weitere 5 oder 10 Minuten auf die Gitlab CI Pipiline warten muss, obwohl es schon nach 7 Uhr Abends ist und ich endlich nach Hause gehen will.

      • 0
        Von NaJa am Mo, 9. Oktober 2017 um 20:56 #

        Eine ähnliche Meinung hatte ich anfangs auch. Mit der Zeit hat sich meine Meinung völlig gedreht. Ja Tabs sind ein NoGo in Python. Wenn man das mischt kommt man in Teufels Küche. Aber wenn man sich angewöhnt 4 Leerzeichen statt Tab zu verwenden hat man damit keine Probleme. In der Regel halten sich auch Alle daran. YAML als Vergleich heranzuziehen ist schon wie ein Vergleich Äpfel mit Birnen.
        Ich kann nur jedem empfehlen mal ein paar Programme mit Python zu programmieren. Dann lernt man die Vorzüge dieser Sprache kennen.

        • 0
          Von homer am Di, 10. Oktober 2017 um 07:40 #

          An dieser Stelle möchte ich die OpenSource-Entwicklungsumgebung "The Eric Python IDE" empfehlen. Damit hat der User kein Problem mit Leerzeichen/Tabs etc. Die Syntax (PEP 8 - "Style Guide for Python Code") wir automatisch korrekt gesetzt. Entwicklungswerkzeuge wie interaktiver Debugger, Class Browser, Versionskontrolle (Git, Subversion, ...), PyQt-Intergration, etc. sind alle integriert. Die Entwicklungsumgebung selbst ist übrigens in Python programmiert.

0
Von Missjö am So, 8. Oktober 2017 um 09:20 #

Hoffentlich kommt gleich jemand aus dem Busch gesprungen und schreit "mit C läuft das schneller!" oder "mit MATLAB läuft das schneller!".

Mein Brot- und Buttergeschäft ist zur Zeit die Auswertung von vergleichsweise großen Datenmengen, welche im Ursprung in einer PostgreSQL-Datenbank lagern. Um nicht jedesmal mehrere 10GB über das Netzwerk abfragen zu müssen, habe ich den für mich relevanten Datenberg als HDF5 mit PyTables lokal und komprimiert abgespeichert - gelegentlich ziehe ich dann die neuesten Daten aus der Datenbank und packe die dann auf diesen Berg oben drauf, welcher sich noch im einstelligen GB-Bereich bewegt. Ausgepackt passt er aber nicht mehr in den RAM meiner Workstation.

Per Pandas / PyTables kann ich nun einfach den Teilbereich des Bergs selektieren, welcher mich für eine bestimmte Auswertung konkret interessiert und bequem abarbeiten. Als Resultat erhalte ich ein IPython Notebook / PDF.

Zu diesem Usecase meine Fragestellungen:
1. Wie mache ich das am Besten mit C / C++ um den genannten Faktor 50 - 150 an Geschwindigkeit herauszuholen? Das würde mir Gedenkpausen im Bereich von etwa 30 Minuten am Tag einsparen - nicht am Stück aber in Summe.
2. Wenn dies mit C zu umständlich sein sollte - wie mache ich das mit MATLAB? Selektive Datenabfrage über den Store scheint nur Zeilenweise aus einem *.csv-File zu funktionieren - so zumindest unsere MATLAB-Freunde in der Firma.

3. Und das ist der eigentliche Bezug zu PyPy -> Da PyPy jetzt auch Pandas / Numpy kann: Gibt es schon einen Benchmarkvergleich, welcher typische Pandas-Workflows unter PyPY und Intelpython vergleicht? Im Rahmen des Scientific Computing hat Intelpython ja schon eine ordentliche Schippe an Performancegewinn drauf gelegt. Bietet PyPy dennoch einen Mehrwert?

0
Von Udo am So, 8. Oktober 2017 um 11:20 #

Hallo, an die die sich ewig streiten :-)
Wenn ich als unwissender, eine Lösung anstrebe, die in der eigentlichen Verarbeitung schnell sein soll, könnte ich doch diesen Teilbereich von jemanden Sachkundigen in C oder C++ schreiben lassen und dann mit Python diese Library nutzen,oder? Wozu sich Streiten, wenn beide Seiten möglich sind?Eine schnelle Verarbeitung und eine schnelle Umsetzung sind so immer realisierbar.
Gruss an den Streithähnen

Pro-Linux
Traut euch!
Neue Nachrichten
Werbung