Ipython: Endlosschleifen im Notebook können nicht unterbrochen werden

Erstellt am 13. Jan. 2013  ·  29Kommentare  ·  Quelle: ipython/ipython

Ich habe kürzlich beim Workshop on Genomics eine Einführung in die Python-Programmierung gegeben. Für das Tutorial haben wir die Notebook-Oberfläche verwendet und sie kam sehr gut an (Danke!). Während der Diskussion über Schleifen bat ich die Schüler, eine Beispiel-for-Schleife in eine while-Schleife umzuwandeln. Dabei haben viele Schüler Endlosschleifen erstellt. Bei einigen dieser Schüler stürzte Firefox ab. Die Lösung bestand darin, den Notebook-Server zu beenden und den Browser zu beenden. Alle Studenten verwendeten Ubuntu-basierte virtuelle Maschinen und Firefox als Browser. Wenn es helfen würde, kann ich weitere Details zu den Systemen erhalten und untersuchen, ob ich dieses Verhalten auf meiner Kopie der virtuellen Maschine reproduzieren kann.

needs-info

Hilfreichster Kommentar

Ich denke, einer von uns muss ein einfaches Notebook finden, das dieses Problem repliziert, zumindest auf einem System.

while True:
    print "foo"

Dies führt dazu, dass Firefox zu 100 % CPU verwendet und in keiner Weise oder Form reagiert. Das Beenden von Firefox und des IPython-Prozesses ist die einzige Möglichkeit, das System zurückzubekommen.

Python 3.0.0
Firefox 42.0
Linux 3.13.0-24-generisch

Alle 29 Kommentare

Würde zufällig der abstürzende eine Ausgabe erzeugen und nicht derjenige, der den Browser nicht zum Absturz brachte?
(Sie sollten einen Kill-Kernel in einem Menü haben)

Wir könnten wahrscheinlich ein Sicherheits-Opt-in-Timeout haben, das den Server beendet, wenn der Kernel zu lange beschäftigt bleibt oder das Frontend zu viele Eingaben erhält

Ich denke, hier gibt es zwei Probleme:

  • Das Unterbrechen einer Endlosschleife ist durchaus möglich. Klicken Sie im Kernel-Menü auf Interrupt.
  • Wenn Ihre Schleife bei jedem Schritt etwas ausgibt, erzeugt sie eine riesige Menge an Ausgabe, was zu Problemen für den Browser führen kann. Siehe auch Ausgabe Nr. 1975.

@Carreau es gab keine Ausgabe

@takluyver das Kernelmenü reagierte nicht. Dies passierte bei Loops, die druckten, und Loops, die nicht druckten.

Können Sie ein Beispiel für eine Schleife geben, bei der es nicht funktioniert?

Am 13. Januar 2013 um 16:11 Uhr schrieb Daniel McDonald [email protected] :

@Carreau https://github.com/Carreau es gab keine Ausgabe

@takluyver https://github.com/takluyver das Kernelmenü war es nicht
ansprechbar. Dies würde bei Schleifen passieren, die drucken, und Schleifen, die dies tun
druckten nicht.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHubhttps://github.com/ipython/ipython/issues/2781#issuecomment -12195606 an.

Ein naiver/schrecklicher Anagrammalgorithmus, wenn die Wörter keine Anagramme voneinander sind

from random import shuffle 
word1 = list("quietx")
word2 = list("quite")
while word1 != word2:
    shuffle(word1)

Ich habe es gerade getestet und kann das ohne Probleme unter Firefox und Ubuntu unterbrechen. Können Sie es zuverlässig auf Ihrem System replizieren?

Ich kann es nicht auf meinem System replizieren. Ich werde Benutzer ausfindig machen, bei denen das Problem aufgetreten ist, und es auf ihren Systemen erneut ausführen. Die Workshop-Sitzungen werden morgen früh fortgesetzt – der Workshop findet in Europa statt und heute ist ein freier Tag – es wird also ein bisschen dauern, bis ich wieder darauf zurückkommen kann.

Ich bin nicht mehr in der Lage, dies zu testen, und konnte dies nicht nachverfolgen
Werkstatt. Da ich das Problem nicht reproduzieren kann und auch sonst niemand,
lasst es uns zu einem Glücksfall machen.

Nochmals vielen Dank für die schnelle Antwort und ich entschuldige mich dafür, dass ich Zeit damit verbracht habe

Am Sonntag, den 13. Januar 2013 um 9:57 Uhr schrieb Thomas Kluyver [email protected] :

Ich habe es gerade getestet und kann es ohne Probleme mit Firefox unterbrechen
& Ubuntu. Können Sie es zuverlässig auf Ihrem System replizieren?


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHubhttps://github.com/ipython/ipython/issues/2781#issuecomment -12196271 an.

Keine Bange. Fühlen Sie sich frei, erneut zu öffnen, wenn Sie einen Weg finden, den Fehler zu reproduzieren.

Ich bekomme das die ganze Zeit im IPython-Notebook in Chrome (und ich habe es gerade in Firefox getestet, und es war "erfolgreich", dh es ist abgestürzt). Ich _denke_, dass es immer passiert, wenn ich eine Endlosschleife habe, die häufig gedruckt wird. Es ist ein Problem für mich, weil ich oft Druckanweisungen zum Debuggen einfüge und dabei den Code verliere, der meinen Fehler aufgrund eines Absturzes beheben sollte.

Hier ist der Code, den ich verwendet habe, um es zum Absturz zu bringen:

importiere numpy als np
x = np.array([0,1,2,3,4])
it = np.nditer(x,flags=['f_index'])
während es nicht fertig ist:
print it.index

Bei mir passiert das auch...
Zuerst reagiert der Browser nicht mehr und später finde ich, dass das gesamte System hängt. Ich bin gezwungen, einen Hard-Reset durchzuführen.
Ich benutze Ubuntu mit xfce Desktop / Firefox.
Wenn es hilfreich wäre, wäre ich bereit, alle anderen Details mitzuteilen, die Sie möglicherweise benötigen, um das Problem zu beheben ...
@Minrk

Dieses Problem scheint immer noch da zu sein!

Ich kann "Interrupt" oder "Restart" aus dem Kernel-Menü ausführen, aber es hat überhaupt keine Wirkung gezeigt. das laufende Symbol wird immer noch als schwarze Kugel angezeigt.

Selbst wenn ich den Computer neu starte, nachdem ich erneut auf das Notizbuch geklickt habe, wird es dort für immer in einer Schleife bleiben!

Ich verwende ein MacBook mit installiertem ipython 2.2.0.

Ich hatte auch dieses Problem: Ipython-Notebook hängt im Browser und kann mit Interrupt-Kernel nicht wiederhergestellt werden. Neben Schleifenfehlern scheint dies bei jedem hängenden Prozess zu passieren, zB wenn eine Internetabfrage innerhalb einer Funktion aus Netzwerkgründen hängen bleibt.

Meine Frage ist, gibt es eine Möglichkeit, über die Befehlszeile auf den zugrunde liegenden Kernel zuzugreifen? Ich starte ipython notebook von einem Terminal aus, und im Moment besteht meine Lösung darin, dieses Terminal per Tastatur zu unterbrechen, wodurch der Kernel vollständig heruntergefahren wird.

Ich habe auch dieses kritische Problem. Es scheint tatsächlich mit Schleifen zusammenzuhängen. Das hindert mich daran, lange Simulationen oder Datenanalysen durchzuführen, was bedeutet: Ich bin am Arsch ...

Ich weiß nicht, ob es damit zusammenhängt, aber mir ist aufgefallen, dass das Hyperthreading, sobald es hängt, in eine CPU zusammenzubrechen scheint, die noch funktioniert. Sie können das zum Beispiel sehen, indem Sie htop verwenden. Zuerst schien es mir, dass Hyperthreading (das die numpy -> BLAS-Bibliotheken auf meiner Maschine ausnutzen) dasjenige war, das abstürzte und das Ganze dann wahnsinnig langsam lief, aber dann versuchte ich zu unterbrechen und hatte kein Glück und so ich erkannte, dass es der IPython-Kernel war, der gerade hängen blieb.

Dieses Problem ist mir nie aufgetreten, wenn:

  • Ich habe einen älteren Computer verwendet (aber immer noch sehr ähnlich, nur weniger RAM und CPUs).
  • Ich habe altes ipython<3.0 verwendet
  • Ich habe nicht an einem Remote-IPython-Notebook gearbeitet

Meine begründeten Vermutungen sind:

  • Problem mit irgendeiner Steckdose irgendwo ...
  • Matplotlib-Threading-Backends vermasseln es <- aber das liegt nur daran, dass sie es fast immer tun, also setzen Sie besser dort die Wette;)

Wenn das Problem auftritt, starte ich einfach den Kernel von der Weboberfläche aus neu und wiederhole, was ich getan habe ...

BEARBEITEN: Es fällt mir auch schwer, es zu reproduzieren, aber ich habe festgestellt, dass das Problem nicht auftritt, wenn ich BLAS nicht verwende, zum Beispiel wenn ich das Punktprodukt von numpy nicht verwende, obwohl ich einige weitere Tests durchführen sollte um das zu verifizieren.

Ich sehe dieses Problem auch ziemlich häufig und es ist schwer zu lösen - wenn es viele Daten gibt, deren Verarbeitung im Kernel zeitaufwändig ist, kann es ziemlich mühsam sein, alles zu beenden und einen Neustart zu erzwingen. Definitiv kein imaginärer Bug :)

Ich habe dieses Problem auch unter OSX + Chrome.

@minrk , ich denke, dies könnte eine Wiedereröffnung wert sein. Ich habe nicht genügend Privilegien, um es einfach wieder zu öffnen, ohne ein neues Problem zu erstellen.

Von der CLI aus sieht es so aus, als würde das Drücken der Stopptaste etwas bewirken, aber das Notebook reagiert nicht.

[I 15:26:22.224 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:26:32.197 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:26:42.688 NotebookApp] Saving file at /Untitled.ipynb
[I 15:27:30.993 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:27:35.605 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:28:43.999 NotebookApp] Saving file at /Untitled.ipynb
[I 15:29:28.038 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee

Ich denke, einer von uns muss ein einfaches Notebook finden, das dieses Problem repliziert, zumindest auf einem System. Sonst wird es wohl nicht zu beheben sein.

Ich sehe dieses Problem auch.

Ich denke, einer von uns muss ein einfaches Notebook finden, das dieses Problem repliziert, zumindest auf einem System.

while True:
    print "foo"

Dies führt dazu, dass Firefox zu 100 % CPU verwendet und in keiner Weise oder Form reagiert. Das Beenden von Firefox und des IPython-Prozesses ist die einzige Möglichkeit, das System zurückzubekommen.

Python 3.0.0
Firefox 42.0
Linux 3.13.0-24-generisch

kann ich mit reproduzieren
Python 3.2.0
Python 2.7.10
Chrome-Version 46.0.2490.86 (64-Bit)
OS X 10.10.5

Auch für mich ein ziemlich großes Ärgernis. Aufgrund dieses Problems muss ich oft den gesamten Notebook-Server zusammen mit Chrome beenden. Ich kann bis zu dem Punkt gelangen, an dem ich auf die Interrupt-Kernel-Schaltfläche klicke und sie hervorgehoben wird, als ob sie angeklickt worden wäre, aber irgendetwas, irgendwo, erhält nicht die Nachricht zum Stoppen.

Mein erster Eindruck ist, dass es sich um ein Problem mit der Text-Rendering-Engine von Chrome handelt, aber ich weiß wenig darüber, wie das funktioniert.

Ein weiteres Beispiel für Langsamkeit ist, wenn eine relativ große Matplotlib nach dem Scrollen in den Vordergrund kommt. Das gesamte Notebook wird für gute 4-5 Sekunden extrem zittrig.

Für das, was es wert ist, verwende ich eine ziemlich kräftige Maschine, daher ist es besonders seltsam, dass Jupyter meine gesamte Maschine in die Knie zwingen kann.

9/10, es passiert zufällig, also ist es nicht so einfach, es einen Benutzerfehlerfehler zu nennen.

Ich hatte gerade dieses Problem bei mir auftreten (zumindest passt es in das oben beschriebene Profil). Ich konnte Windows nicht dazu bringen, regelmäßig zu reagieren, aber _ich konnte_ eine sehr langsame Kopie der gesamten Seite aus der Zwischenablage erstellen, wodurch ich meine letzten Codeänderungen beibehalten konnte.

Keine Lösung des Problems, aber ein möglicher Weg, seine Folgen zu mildern.

Ich hatte heute und in der Vergangenheit das gleiche Problem mit Linux Mint (18.0) und Firefox. Es war ein sehr einfacher count()-Generator, aber ich habe mit __getitem__ herumgespielt und auf dumme Weise einen Druck auf die Taste gesetzt.

Die neuesten Versionen unserer Pakete implementieren eine Ausgabedrosselung, die die Probleme mit großen Ausgabemengen verringern sollte, die den Browser verlangsamen.

Schließen, da dieses Problem nicht in IPython selbst ist und wenn es immer noch problematisch und relevant ist, sollte es im richtigen Repository geöffnet werden. Dadurch kann die Anzahl der geöffneten Probleme im IPython-Repo unter Kontrolle gehalten werden.

Fühlen Sie sich frei, weiter zu kommentieren oder bei Bedarf erneut zu öffnen.

Danke.

@Carreau , haben Sie ein vorgeschlagenes Repository (oder wurde dies einfach nicht dorthin übertragen, wo die Notebook-Probleme verfolgt werden ...)?

Das muss entweder zu Jupyter/Notebook oder Jupyterlab/Jupyterlab migriert werden. Wahrscheinlich das zweite, wenn es auch Jupyterlab betrifft.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen