Montag, Juni 1, 2020

ipython notebook 11-mal langsamer als python: warum?

Ich bin ein Skript ausgeführt, in ipython notebook (mit Chrome) und bemerkt, dass es 11-mal langsamer als wenn ich das gleiche Skript in Python, mit spyder als meine IDE.
Das Skript ist Recht einfach: es ist nur eine Reihe von Schleifen und Berechnungen auf ein pandas dataframe. Keine Ausgabe auf dem Bildschirm noch geschrieben zu externen Dateien. Ich erwarte, dass der code slowish, weil es nicht vektorisiert, ich Schätze Ipython kann mit einem gewissen overhead, aber 11 mal… ! Kannst du dir Gründe, warum? Irgendwelche Vorschläge?

Dank!

  • downvoting ohne Kommentarfunktion ist sehr nützlich: ich danke Ihnen so sehr!
  • Wie sind Sie mit dem timing, es ist in beiden Fällen?
  • Ich bin timing mit : s Zeit / start_time = time.time() / verstrichene = Zeit.time() – start_time
  • Und sind die timings reproduzierbar wenn man es mehrmals in beide? IPython ist wirklich nur mit den code in Python intern, also die Geschwindigkeit, sollte es nicht anders sein.
  • Ja, ich habe versucht, millionenfach und die timings sind die gleichen
  • Ist es definitiv das gleiche Python-interpreter ausgeführt werden? Blick auf sys.executable zu überprüfen? Und Sie haben definitiv die exakt gleichen Daten? Sorry, wenn dieser sound wie dumme Fragen, aber ich kann wirklich nicht denken, warum-code ausgeführt würde, anders als in IPython.
  • Ja, gleiche sys.ausführbare Datei in beiden Fällen. Der code ist ein (sehr unoptimised) – Schleife iteriert über bestimmte Elemente eines pandas dataframe, um einige Berechnungen durchzuführen. Ich könnte optimieren es durch die Berechnung einige Felder mit pandas.Zusammenführen, wie ein sql-join, und vielleicht mit Numba, aber das ist nicht der Punkt: warum Ipython ist so viel langsamer sein soll ist mir schleierhaft
  • Ist der code etwas, das Sie teilen können, damit wir versuchen können, um es zu reproduzieren? Oder kann Sie erzeugen ein minimal-Beispiel, das zeigt, das problem?
  • Es ist wahrscheinlich, Chrom
  • Ich habe bemerkt seit dem vergangenen Jahr, die python-3-code auf jeder beliebigen version von Jupyter läuft von Anaconda Navigator in firefox, wird sich in 5 Sekunden für eine einfache print(„Hallo Welt“)

1 Kommentar

  1. 4

    Getestet habe ich diese auf meinem Rechner, und festgestellt, dass ipython war tatsächlich schneller.

    $ cat ex.py 
    import time
    import numpy as np
    now = time.time() #(seconds)
    a = []
    for j in range(2):
      for s in range(10):
        a.append(np.random.random())
    then = now
    print(time.time() - then)
    
    $ python ex.py 
    0.142902851105
    
    In [1]: %run ex.py
    0.06136202812194824
    

    Ich Wette, es ist das Chrom Teil Ihrer ipython setup, welches die Ursache der Verlangsamung.

Kostenlose Online-Tests