Ipython: "Run All" im Notebook hängt an %matplotlib qt

Erstellt am 16. Apr. 2014  ·  39Kommentare  ·  Quelle: ipython/ipython

Dies ist ein seltsamer Fehler, aber er scheint systemübergreifend reproduzierbar zu sein.

Wenn ich ein Notebook habe, wo die erste Zelle ist

%matplotlib qt

Und ich wähle "Run All", IPython führt die erste Zelle aus, hängt aber dann. Das Statussymbol in der oberen rechten Ecke ist ein offener Kreis, aber ich kann keine anderen Zellen ausführen. Wenn ich nach der Zeile %matplotlib eine einfache print-Anweisung hinzufüge, wird sie ausgeführt und in der Ausgabezone ausgegeben.

Dies passiert nicht, wenn ich die Zelle "manuell" ausführe. Sobald das passiert ist, kann ich ohne Probleme "Run All" auswählen.

Dies geschieht mit IPyhton 2.0 auf OSX 10.6 und 10.8. Ich verwende Python 2.7 über Anaconda.

Ich freue mich, alles zu versuchen, um dies weiter aufzuspüren...

bug matplotlib

Hilfreichster Kommentar

Das Problem tritt auch mit der Magie %gui qt , obwohl ich denke, dass diese unter bestimmten Umständen versucht, Matplotlib zu importieren, daher bin ich mir nicht sicher.

Alle 39 Kommentare

Ähnliches bemerke ich bei einer Python 2.7-Installation von miniconda unter Windows. Wenn ich ein Notebook habe, in dem sich die erste Zelle befindet:

%pylab

"Run All" bleibt immer hängen, auch nachdem diese bestimmte Zelle manuell ausgeführt wurde. Danach muss ich Kernel->Restart ausführen, damit das Notebook auf irgendetwas reagiert. Meine Problemumgehung besteht darin, diese Zelle manuell auszuführen, zur nächsten Zelle zu wechseln und dann "Alle unten ausführen" zu wählen.

Ich freue mich auch, Ihnen weitere Informationen zur Verfügung zu stellen, um dies weiter zu verfolgen.

Ich kann dies auch bestätigen (und es ist ziemlich ärgerlich, wenn Sie eine erste Zelle mit sowohl %matplotlib als auch einigen Importen haben (deren Ausführung einige Zeit in Anspruch nimmt) und Sie diese zusammen mit den nächsten Zellen ausführen möchten).

Eine einfache Möglichkeit, dies zu reproduzieren:

  1. Ein Notebook mit zwei Zellen:

%matplotlib import time time.sleep(10)

print "This will not print"

  1. Beides gleichzeitig ausführen (zweimal Shift-Enter drücken)
  2. Die erste Zelle wird ausgeführt, aber dann hängt der Kernel (die zweite Zelle wird nicht ausgeführt, Sie können nichts ausführen, obwohl der Indikator sagt, dass der Kernel bereit ist).

untitled

Es hängt also nicht unbedingt mit "Run all" zusammen, sondern nur mit dem Ausführen mehrerer Zellen, wobei eine Zelle %matplotlib .

Zuletzt getestet mit IPython 2.1, Windows 64 Bit, Firefox 31

Nach etwas mehr Experimentieren stellte ich fest, dass dieses Problem bei mir erstmals in Version 2.0.0 auftaucht. Wenn ich mit zu Version 1.2.1 zurückkehre

conda install ipython=1.2.1

das problem ist weg.

Windows 32-Bit, Python 2.7.7, Firefox 31

Ich bin auch auf diesen Fehler gestoßen und kann mit der obigen Methode mit Python 3.4.1, Anaconda 2.1.0 (64-Bit) unter Windows 8, IPython 2.3.1 reproduzieren
Es ist ein ziemlich nerviger Fehler. Gibt es etwas, was ich tun kann, um es aufzuspüren? Wann wird voraussichtlich der 4.0-Meilenstein (ungefähr) abgeschlossen sein?

Ich bestätige den Fehler mit der aktuellen ipython-Version von github (e2778c5f4047d03f5f025bd53d1704a0cf9f0337) auf Linux Mint 17, Python 3.4 und Matplotlib 1.4.0.

Gibt es Neuigkeiten zu diesen Jungs? Bei Bedarf kann ich weitere Tests durchführen. Dieser Bug ist echt nervig!!!

Ich kann bestätigen, dass dies auch bei mir passiert, unter CentOS mit Python 2.7 und Matplotlib 1.4.4 die ganze Zeit

Funktioniert es, wenn Sie die Zelle manuell ausführen?

Siehe meinen Kommentar oben (https://github.com/ipython/ipython/issues/5629#issuecomment-50603511), er erscheint auch, wenn Sie mehrere Zellen manuell ausführen run

Ja - es ist im Grunde ein Timing-Problem, glaube ich. Wenn Sie Umschalt + Eingabetaste ausführen, führen Sie die Zelle aus, warten Sie eine Sekunde und fahren Sie dann mit den anderen fort, dann funktioniert es. Wenn Sie wiederholt Umschalt+Eingabe drücken, hängt es. Das Ausführen weiterer Zellen führt dazu, dass kein Code tatsächlich ausgeführt wird (auch bekannt als der kleine Kreis oben rechts ist noch leer).

^ das habe ich auch beobachtet.

Verifiziert in Ipython Notebook 3.1.0. Problemumgehung:

import time
%matplotlib
time.sleep(1)

Hässlich, aber es ist zu nervig, die Option aufzugeben, alle auszuführen.

Ich habe das auch auf meiner Maschine zum Laufen gebracht.

Am Freitag, den 12. Juni 2015 um 7:02 Uhr schrieb quicknir [email protected] :

Verifiziert in Ipython Notebook 3.1.0. Problemumgehung:

Importzeit
%matplotlib
Zeit.Schlaf(1)

Hässlich, aber es ist zu nervig, die Option aufzugeben, alle auszuführen.


Antworten Sie direkt auf diese E-Mail oder zeigen Sie sie auf GitHub an
https://github.com/ipython/ipython/issues/5629#issuecomment -111502934.

Könnten wir dies für 4.1 (oder 5.0) als Meilenstein erreichen?
Das Aufhängen von Notizbüchern klingt (für mich) etwas strenger als es für einen Meilenstein auf der Wunschliste angemessen ist. Außerdem ist dieser Fehler bei der Verwendung von matplotlib ärgerlich (trotz des Workarounds).

Sollten wir als Problemumgehung nur ein sleep(1) in der Matplotlib-Magie selbst haben, bis wir herausfinden, warum?

:+1:

Die Schlafumgehung funktioniert bei mir selten. Ich habe gesehen, dass es ein paar Mal funktioniert, aber die meiste Zeit, in der ich es ausprobiert habe, hängt das Notebook immer noch.

Die einzige Problemumgehung, die für mich durchweg funktioniert, ist:

  1. Führen Sie die Zelle, die %matplotlib enthält, manuell aus
  2. Warten Sie auf die Kernel-Leerlaufanzeige
  3. wähle die folgende Zelle aus
  4. "Alles unten ausführen"

FWIW Ich habe versucht, dies ein wenig zu testen, um eine vernünftigere Einschätzung zu erhalten, wie gut das funktioniert.

Ich habe ein Notizbuch mit den folgenden drei Zellen erstellt:

import time
%matplotlib qt
time.sleep(1)
with open("test_log.txt", "a") as fid:
    fid.write("it worked\n")

dann in der Shell lief:

for i in {1..100}; do
    ipython nbconvert --execute test_qt.ipynb  --inplace;
done
wc -l test_log.txt

Vielleicht verwendet dieser Test nicht den richtigen Code, aber er scheint ok zu funktionieren.

Als 4.1 markiert, sehen wir es uns an.

Vielen Dank.
Ich habe gerade das Repro von @mwaskom ausprobiert und die gleichen Ergebnisse erhalten. Ich habe dann jedoch den Zeit- und Schlafcode herausgerissen und den Shell-Teil erneut ausgeführt, und es hat _auch_ funktioniert! Dies scheint also kein gutes Reproverfahren (oder interner Workaround) zu sein. :-/
Ich habe auch festgestellt, wie @tanderl , dass die

Unter Windows 8.1 habe ich mit Ipython 3.2.0, das über Anaconda installiert wurde, auch festgestellt, dass die Schlafumgehung bei mir nicht funktioniert, dh mit sleep(1) (oder noch größeren Werten) in derselben Zelle wie die Matplotlib-Magie Run Alles auf einem frisch neu gestarteten Kernel hängt immer noch (oder tut nichts, die Benutzeroberfläche funktioniert immer noch), mit einem Stern in der folgenden Zelle. Das manuelle Ausführen der Zellen nacheinander mit dazwischenliegenden Wartezeiten funktioniert immer noch.

Ich bestätige, was @bilderbuchi mit einem aktualisierten Anaconda-Stapel auf Linux Mint gesagt hat.

Hallo,
Ich habe gerade ein ähnliches Problem erlebt. Beim Ausführen von Notebooks, die %matplotlib Inline- oder Notebook-Magie verwenden, hängt das "Alle Zellen ausführen" manchmal und ich muss alle Zellen von Hand ausführen.
Ich verwende Windows 7, Python 3.5, IPython 5.1.0, Notebook 4.1.0 und Matplotlib 1.5.3.
Als Workaround bereinige ich alle Ausgaben und dann scheint es zu funktionieren. Ich kann leider kein reproduzierbares Notebook zur Verfügung stellen (wird ausreichen, wenn ich in Zukunft darauf stoße).

Freundliche Grüße,
Florian

Dies ist immer noch ein Problem, sowohl im Jupyter-Notebook als auch im Labor.

@thomasaarholt hast du ein zuverlässiges reproduktionsverfahren?

@bilderbuchi siehe den ursprünglichen Beitrag in dieser Ausgabe, es ist immer noch das gleiche Problem. Hier ist ein GIF von mir, wie ich dies auf meinem Computer neu erstelle (OSX mit dem neuesten Jupyter und qt4)

bug

@Carreau , ist das Repro genug, um damit zu arbeiten? Sollte ein hängender Fehler dringender sein als "Wunschliste"?

@bilderbuchi @Carreau , ich habe gerade das
Ich möchte argumentieren, dass dieser Fehler viel, viel höhere Priorität haben sollte:

Viele neue Jupyter-Benutzer werden die Verwendung von Jupyter durch bereits vorhandene Notebooks erlernen. Zum Beispiel versuchen sie, eine Beispielarbeitsmappe auszuführen, die von einem Plugin bereitgestellt wird. Bei dem aktuellen Verhalten werden Benutzer, die den Run All-Befehl verwenden oder "Shift + Enter" schnell durch das Notebook blättern, feststellen, dass das Notebook vom ersten Moment an hängt, was einen sehr schlechten ersten Eindruck vermittelt. Ein solcher Eindruck kann für jemanden, der zum ersten Mal Programmieren lernt oder in der Vergangenheit eine schlechte Erfahrung (Klasse/Prüfung) gemacht hat, oft wirklich betonen, wie "kompliziert Kodieren ist".

Ich möchte argumentieren, dass dieser Fehler viel, viel höhere Priorität haben sollte:

Nun, es ist keine Frage der Priorität mehr, der Fehler ist jetzt seit mehr als 2 Jahren offen und das Problem ist, dass niemand ihn herausfinden kann. Wir haben versucht, das herauszufinden, aber es scheint eine schwer fassbare Lösung zu sein, und wir können nicht Experten für alle Framework-Eventloops und -Bibliotheken sein. Wir würden gerne etwas unternehmen, aber das Problem besteht schon so lange, dass es nicht hilft, es mit einer höheren Priorität zu markieren. Keiner der Entwickler weiß, was los ist. Sonst hätten wir es repariert.

@Carreau Können Sie mir sagen, wo im Ipython-Code die Integration zwischen dem Kernel-Server und der GUI stattfinden sollte?

Gibt es eine Möglichkeit, ein Notebook programmgesteuert in einem Browser zu öffnen und alle Zellen auszuführen? Das würde uns wahrscheinlich ermöglichen, den Code zu halbieren, um herauszufinden, welche Änderung dies verursacht.
Ich habe versucht, das fehlerhafte Notebook über nbconvert --execute vom Terminal aus und innerhalb einer IPython-Sitzung auszuführen, konnte es aber bisher nicht zum Aufhängen bringen.

@bilderbuchi Kannst du den Fehler "von Hand" auf deinem Computer reproduzieren?

Ja. Ich habe ein interessantes Verhalten gefunden, als ich verschiedene Variationen der Magie ausprobierte
Inhalt der ersten Zelle:

%matplotlib notebook -> works
%matplotlib inline -> works
%matplotlib -> prints Using matplotlib backend: Qt5Agg, then hangs
%matplotlib qt -> prints ModuleNotFoundError: No module named 'PyQt4' (I think that's a different unrelated bug)
%matplotlib qt5 -> prints nothing, then hangs

(Der andere Fehler bei %matplotlib qt ist ContinuumIO/anaconda-issues#1068, denke ich.)
Die zweite Zelle hat nur

print("This will not print")

Wenn ich oben "hängt" gesagt habe, meine ich, dass die zweite Zelle immer einen Stern anstelle von "2" in der Zahl hat und die Nachricht nie gedruckt wird.
All dies wurde mit Kernel - Restart & Run All ausgeführt, um eine saubere Seite zu gewährleisten. Dies ist auf Python 3.6.1 über Anaconda unter Windows 10, IPython 5.3.0, Firefox 52.0.2.

Können Sie mir sagen, wo im Ipython-Code die Integration zwischen dem Kernel-Server und der GUI stattfinden sollte?

Eine Beschreibung, wie die Event-Loop-Integration funktionieren soll, finden Sie hier: http://ipython.readthedocs.io/en/stable/config/eventloops.html#event -loops-in-the-kernel

Und der Code für die Qt 5-Ereignisschleife beginnt hier: https://github.com/ipython/ipykernel/blob/20426cdad71820642dc69b95c30565d155521509/ipykernel/eventloops.py#L89

Nur um zu überprüfen - ist das Problem definitiv mit dem "matplotlib"-Teil von %matplotlib und nicht mit Magie im Allgemeinen? Nur für den Fall, dass die anderen Magien weniger Zeit brauchen und der Fehler daher weniger auffällt.

Das Problem tritt auch mit der Magie %gui qt , obwohl ich denke, dass diese unter bestimmten Umständen versucht, Matplotlib zu importieren, daher bin ich mir nicht sicher.

Dies hat (direkt) nichts mit Matplotlib oder Magie zu tun. Es ist mit ziemlicher Sicherheit eine Rennbedingung, wenn man die Hand von einer Event-Schleife, die die Show läuft, zur anderen macht.

Ich vermute, dass hier ein ähnlicher Fix wie https://github.com/ipython/ipython/pull/10301/files benötigt wird.

Ich hatte ein ähnliches Problem nach der Aktualisierung von Spyder

Ich kann bestätigen, dass dies immer noch mit %gui qt passiert. Ich habe eine Menge Qt-Sachen, die ich von Notebooks aus anrufe, und in diesen Notebooks muss ich meine erste Zelle manuell ausführen, warten, bis sie abgeschlossen ist, und dann alles unten ausführen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen