Spyder: Spyder 4.0.0 ist unerträglich langsam beim Hinzufügen oder Entfernen von Linien

Erstellt am 9. Dez. 2019  ·  30Kommentare  ·  Quelle: spyder-ide/spyder

Problembeschreibung

Spyder ist jedes Mal sehr, sehr langsam, wenn ich Zeilen im Editor hinzufüge (mit Enter) oder entferne (mit der Tastenkombination Strg + D). Es dauert durchschnittlich fast eine Sekunde für jede Zeile. Wenn Sie die Taste gedrückt halten, werden die Zeilenbefehle gepuffert und dann so langsam wie etwa zwei Sekunden pro Zeile hinzugefügt oder gelöscht.

Gleiches Problem nach spyder --reset. Es wurde auch versucht, die automatische Vervollständigung umzuschalten. Dies ist seit dem Beta / Release-Kandidaten geschehen und ich habe es aus diesem Grund nicht verwendet. Spyder ist jetzt für mich so unbrauchbar.

Welche Schritte reproduzieren das Problem?

  1. Drücken Sie die Eingabetaste oder Strg + D.

Was ist die erwartete Leistung? Was siehst du stattdessen?

Ich erwarte, dass es nicht so lange dauert wie bei älteren Versionen.

Versionen

  • Spyder-Version: 4.0.0
  • Python-Version: 3.7.5
  • Qt-Version: 5.9.6
  • PyQt-Version: 5.9.2
  • Name / Version des Betriebssystems: Win 10

Abhängigkeiten

Cloudpickle> = 0,5,0: 1,2,2 (OK)
pyictions> = 2.0: 2.5.2 (OK)
qtconsole> = 4.6.0: 4.6.0 (OK)
nbconvert> = 4.0: 5.6.1 (OK)
Sphinx> = 0,6,6: 2,2,2 (OK)
Pylint> = 0,25: 2,4,4 (OK)
psutil> = 0,3: 5,6,7 (OK)
qtawesome> = 0,5,7: 0,6,0 (OK)
qtpy> = 1.5.0: 1.9.0 (OK)
pickleshare> = 0,4: 0,7,5 (OK)
zmq> = 17: 18.1.0 (OK)
chardet> = 2.0.0: 3.0.4 (OK)
numpydoc> = 0,6,0: 0,9,1 (OK)
spyder_kernels> = 1.8.1; <2.0.0: 1.8.1 (OK)
qdarkstyle> = 2,7: 2,7 (OK)
Atomicwrites> = 1.2.0: 1.3.0 (OK)
diff_match_patch> = 20181111: 20181111 (OK)
Interviewbaum: Keine (OK)
Wachhund: Keine (OK)
Schlüsselring: Keine (OK)
pexpect> = 4.4.0: 4.7.0 (OK)
Pympler: Keine (OK)
Sympy> = 0,7,3: 1,4 (OK)
Cython> = 0,21: 0,29,14 (OK)
IPython> = 4.0: 7.10.1 (OK)
matplotlib> = 2.0.0: 3.1.1 (OK)
Pandas> = 0,13,1: 0,25,3 (OK)
numpy> = 1,7: 1,17,4 (OK)
scipy> = 0.17.0: 1.3.1 (OK)
Pyls> = 0,31,2; <0,32,0: 0,31,2 (OK)
Baum> = 0,8,3: 0,8,3 (OK)

Editor Bug

Hilfreichster Kommentar

@bcolsen Zusätzlich zum Aktualisieren der aktuellen Datei sollte diese auch nicht aktualisiert werden, wenn der Gliederungs-Explorer nicht einmal sichtbar ist (wie meine Tests jetzt bestätigen).

Alle 30 Kommentare

@gabrielclow , deine Beschreibung reicht nicht aus. Bitte posten:

  1. Welche Art von Dateien bearbeiten Sie (Python oder andere)?
  2. Wie viele Zeilen haben Sie Datei?
  3. Haben Sie Dinge wie "Einrückungsführungen" aktiviert?

Zum Schluss posten Sie bitte ein Video (animiertes GIF mit dem Licecap), um zu sehen, worauf Sie sich genau beziehen.

@gabrielclow , deine Beschreibung reicht nicht aus. Bitte posten:

  1. Welche Art von Dateien bearbeiten Sie (Python oder andere)?
  2. Wie viele Zeilen haben Sie Datei?
  3. Haben Sie Dinge wie "Einrückungsführungen" aktiviert?

Zum Schluss posten Sie bitte ein Video (animiertes GIF mit dem Licecap), um zu sehen, worauf Sie sich genau beziehen.

  1. Ich bearbeite nur .py-Dateien
  2. Sieht nicht so aus, als ob es von der Anzahl der Zeilen abhängt. Passiert in kleinen Dateien mit 50 Zeilen zu großen mit 5k Zeilen.
  3. Ich benutze nur die automatische Vervollständigung (Konfiguration im Screenshot). Der Rest ist deaktiviert (kein Flusen, kein Flusen im Codestil, kein Flusen mit Dokumentenzeichenfolgen, keine Einrückungshandbücher). Ich habe keine anderen Sprachen eingerichtet und auch versucht, Kite ein- und auszuschalten.

autocomplete

Im GIF halte ich die Eingabetaste gedrückt, warte, bis die neuen Zeilen erstellt wurden, und halte dann Strg + Z gedrückt, um sie zu entfernen (der gleiche Effekt wie Strg + D, also hat es vermutlich auch nichts mit dem zu tun Abkürzung). Spyder stoppt dann und fügt die Zeilen sehr langsam hinzu oder löscht sie, anstatt es reibungslos zu tun:

stopwatch

Update : Anscheinend ist die Verlangsamung weniger spürbar, wenn ich einige Dateien schließe!
Update 2 : Außerdem hängt das Ausmaß der Verlangsamung anscheinend mit der Anzahl der geöffneten Dateien + der Anzahl der Zeilen in jeder Datei zusammen, dies geschieht jedoch unabhängig von der aktuell ausgewählten. Wenn ich nur ein paar kleinere Dateien behalte und den Rest schließe, ist es viel flüssiger
Update 3 : Wenn ich zu lange gedrückt halte oder zu schnell drücke, kann Spyder sogar eine Weile hängen bleiben

Außerdem hängt das Ausmaß der Verlangsamung anscheinend mit der Anzahl der geöffneten Dateien zusammen

Wie viele Dateien haben Sie geöffnet, als Sie die schlimmste Verlangsamung gesehen haben?

Außerdem hängt das Ausmaß der Verlangsamung anscheinend mit der Anzahl der geöffneten Dateien zusammen

Wie viele Dateien haben Sie geöffnet, als Sie die schlimmste Verlangsamung gesehen haben?

Ich arbeite meistens mit 6-8 geöffneten Dateien. Normalerweise sind ungefähr zwei von ihnen größer (4k-5k Zeilen) und der Rest sind kleinere Dateien mit 100-500 Zeilen.

@ CAM-Gerlach, hast du so etwas schon mal gesehen?

Wenn ich das kommentieren darf, habe ich auch das gleiche Problem, weshalb ich Spyder 4 deinstalliert und zu Spyder 3.3.6 zurückgekehrt bin.
Ich habe nur die Einstellungen aktiviert, die auch in Spyder 3 aktiviert sind, also PEP8-Überprüfung; Code-Vervollständigung und Details sind aktiviert; aber keine Dokumentenprüfung; Code Ausschnitte; Schwebebeschreibungen; Drachen; usw.
Die Verlangsamung ist in @gabrielclows GIF dargestellt, obwohl es manchmal bis zu 2 Sekunden dauern kann, bis eine einzelne Zeile eingefügt wird.

Wenn ich große Pakete erstelle, ist es nicht ungewöhnlich, dass 30-50 Python-Dateien gleichzeitig geöffnet sind, von denen einige leicht mehr als 3.000 Codezeilen enthalten können (ich hatte diese geöffnet, als ich die massive Verlangsamung bemerkte).
Da ich die meiste Zeit 3 ​​Monitore gleichzeitig zum Bearbeiten meiner Skripte verwende, die maximal 8 Bedienfelder aufnehmen können, und ich häufig zwischen Dateien wechseln muss, funktioniert das Schließen der meisten dieser Dateien für mich nicht.

Ich persönlich habe das Gefühl, dass der Hauptgrund für diese Verlangsamung darin besteht, dass es einige Datenbanken und Skripte gibt, die aktualisiert / ausgeführt werden müssen, wenn eine geöffnete Datei geändert wird.

Gibt es zufällig ein Skript, das in allen Zeilen in allen geöffneten Dateien ausgeführt wird, wenn eine Datei geändert wird?
Dies würde erklären, warum die Verlangsamung mit der Gesamtzahl der Zeilen in allen geöffneten Dateien zu skalieren scheint und warum sie unabhängig von der zu bearbeitenden Datei zu sein scheint.

Ich kann diesen Fehler bestätigen. Es ist nicht so schlimm (bis jetzt nicht wirklich bemerkt) auf meinem Computer, aber das Hinzufügen / Entfernen von Zeilen ist viel langsamer als das Hinzufügen von Text. Das Enter-Problem macht sich wirklich bemerkbar, wenn Sie es gedrückt halten.

@bcolsen , wie können wir es reproduzieren?

Öffnen Sie ungefähr 40 Dateien und es scheint ziemlich gut zu verlangsamen. Es sieht so aus, als ob in docdidchange möglicherweise etwas vorhanden ist, das alle Dateien überprüft, nicht nur die aktive. Vielleicht der Outliner.

@ ccordoba12 Soweit ich das mainwindow.py öffnen, solange Einrückungshandbücher aktiviert sind ( Wenn Sie geteilte Scheiben haben, verdoppelt sich die Verzögerung oder mehr. Das Löschen von Zeilen hat dieselbe große Verzögerung (genau wie hier beschrieben; mit einer Latenz von ~ 1 s und einer Wiederholungsverzögerung von ~ 1 s auf einem mäßig leistungsstarken Computer und skaliert proportional zur Dateilänge und der Anzahl der geöffneten geteilten Fenster) wie die anderen von mir getesteten Dinge dort (Verschieben von Linien, Duplizieren von Linien usw.), und ich kann bestätigen, dass dies auf Spyder 4 final immer noch geschieht, wenn nur die temporäre Datei und mainwindow.py mit sauberen Einstellungen geöffnet sind.

Ich dachte jedoch, dass Einrückungshandbücher nicht standardmäßig aktiviert sind, und tatsächlich scheinen sie nicht aktiviert zu sein, nachdem ich die Einstellungen zurückgesetzt habe, aber ich kann mit keiner anderen Einstellung (Echtzeitcode) annähernd diese Verzögerung wiederholen Analyse, OTF-Abschluss, Fehler und Warnungen unterstreichen, Leerzeichen anzeigen usw.); Wenn jedoch alle aktiviert sind, verzögert sich das Einrücken von Hilfslinien.

Gibt es zufällig ein Skript, das in allen Zeilen in allen geöffneten Dateien ausgeführt wird, wenn eine Datei geändert wird?

LSP wird aufgerufen, und ich dachte zunächst, dass es das war, aber basierend auf seinem Verhalten mit geteilten Fenstern, bestimmten angezeigten Elementen, aber nicht anderen usw. Ich denke, es könnte stattdessen mit dem Neuzeichnen zusammenhängen (Zeichnen der gesamten Datei anstelle nur der sichtbaren Bereich usw.). Aber das ist weit über meiner Gehaltsstufe.

@ ccordoba12 Soweit ich das mainwindow.py öffnen, solange Einrückungshandbücher aktiviert sind ( Wenn Sie geteilte Scheiben haben, verdoppelt sich die Verzögerung oder mehr.

Wenn ich auch die Einrückungshilfslinien aktiviere und meine 50 Dateien geöffnet und 8 geteilte Bereiche habe (so bearbeite ich normalerweise meine Dateien), erhöht sich die Verzögerung auf 6 bis 10 Sekunden pro neuer Zeile.
Der Computer, den ich verwende, ist ein High-End-Gaming-Desktop. Das liegt also nicht wirklich an der Leistung des Computers.

@dalthviz und ich haben erfolglos versucht, #

Öffnen Sie ungefähr 40 Dateien und es scheint ziemlich gut zu verlangsamen. Es sieht so aus, als ob in docdidchange möglicherweise etwas vorhanden ist, das alle Dateien überprüft, nicht nur die aktive. Vielleicht der Outliner.

Ok, das ist ein guter Anfang. Wir werden das überprüfen.

@ ccordoba12 Ich habe die @bcolsen vorgeschlagen hat ist in der Tat das Gliederungsfenster, obwohl es tatsächlich auftritt, unabhängig davon, ob das Fenster offen oder geschlossen ist. Auf einem Computer der unteren Preisklasse ist es tatsächlich sichtbar (wenn auch bei weitem nicht so schlecht), wenn nur temp.py und mainwindow.py geöffnet sind, nichts anderes aktiviert ist und kein Gliederungsfenster geöffnet ist. So reproben Sie aus sauberen Einstellungen:

  1. Öffnen Sie mainwindow.py und ein geteiltes Editorfenster und stellen Sie das rechte Feld so ein, dass temp.py angezeigt wird, und das linke, um das Hauptfenster anzuzeigen.
  2. Halten Sie im linken Bereich (Hauptfenster) die Zeile Löschen / Duplizieren / Verschieben gedrückt, machen Sie sie rückgängig / wiederholen usw. Eine kleine, aber merkliche Verzögerung ist erkennbar.
  3. Öffnen Sie den Gliederungsbereich (der standardmäßig ausgeblendet war). Dadurch (aufgrund eines geringfügigen, aber nützlichen offensichtlichen Fehlers) wird die im Gliederungsbereich angezeigte Datei von der fokussierten Datei de-synchronisiert, da beim Öffnen die aktivierte Datei im ganz rechten geteilten Bereich und nicht im aktiven geteilten Bereich angezeigt wird / nicht versteckt.
  4. Wiederholen Sie das Löschen von / etc / lines im Hauptfenster. Es ist nur eine sehr geringe Verzögerung vorhanden und die Wiederholungsrate ist höher (wahrscheinlich ist dies bei Maschinen mit geringerer Leistung deutlicher zu erkennen).
  5. Klicken Sie auf das rechte Feld (temp.py) und dann zurück zum linken Feld (Hauptfenster), damit der Gliederungs-Explorer den Umriss des linken Felds korrekt anzeigt.
  6. Wiederholen Sie das Löschen von / etc., Und die Verzögerung ist wieder da, wie in Schritt 2 (wenn der Gliederungs-Explorer überhaupt nicht sichtbar war).

Um es mit vielen Dateien zu testen, suchte ich im Verzeichnis spyder nach import os , öffnete die ersten 40-50 Dateien in einer geteilten Bedienfeldansicht (weniger größere Dateien sollten den entsprechenden Effekt erzielen) und wiederholte Schritte 2-6 oben. Selbst in einer kurzen Datei gab es beim Löschen von Zeilen in den Schritten 2 und 6 (Gliederungs-Explorer ausgeblendet und in der aktiven Datei angezeigt) eine weitaus größere Verzögerung (ähnlich der Einrückungsführungsebene im Hauptfenster), während im Wesentlichen keine vorhanden war Verzögerung (als ob keine Dateien geöffnet wären oder Spyder 3-Level) in Schritt 4 (Gliederungs-Explorer geöffnet und von aktiver Datei de-synchronisiert).

In der Zwischenzeit war das Aktivieren von Einrückungshilfslinien für beide Male, das Löschen von / etc-Zeilen, unabhängig von der Anzahl der geöffneten Dateien sehr langsam, und die resultierende Verzögerung schien nur durch die Länge der zu ändernden aktuellen Datei und die Anzahl der angezeigten geteilten Fenster wesentlich beeinflusst zu werden die Datei.

  1. Öffnen Sie den Gliederungsbereich (der standardmäßig ausgeblendet war). Dadurch (aufgrund eines geringfügigen, aber nützlichen offensichtlichen Fehlers) wird die im Gliederungsbereich angezeigte Datei von der fokussierten Datei de-synchronisiert, da beim Öffnen die aktivierte Datei im ganz rechten geteilten Bereich und nicht im aktiven geteilten Bereich angezeigt wird / nicht versteckt.

Das klingt wirklich nach dem, was ich erlebe, fügt aber nur ein weiteres Detail hinzu: Ich arbeite mit einem separaten Editorfenster auf einer anderen Anzeige und schließe das Editorfenster auf Spyder jedes Mal, wenn ich es starte. Daher tritt dieser Fehler immer noch mit einem einzelnen Editorfenster ohne geteilte Fenster auf, wenn dies relevant ist. Indent Guides machen es auch viel länger.

Ich hoffe, Sie finden die Antwort und diese wird bald behoben, damit ich den großartigen Dunkelmodus in 4.0.0 verwenden kann

Ich kann bestätigen, dass der Outliner jedes Mal, wenn eine Zeile hinzugefügt oder entfernt wird, alle geöffneten Dateien aktualisiert. Dies führt zu einer Verlängerung der Zeit für das Entfernen / Hinzufügen von Zeilen, die mit der Anzahl der geöffneten Dateien zunimmt. Ich habe in der obigen PR eine einfache "Korrektur" vorgenommen, die das Problem mit vielen geöffneten Dateien zu beheben scheint. @ Impact27 Gedanken?

Ein separates, aber offensichtlich damit verbundenes Problem besteht darin, dass große Dateien (> 2000 Zeilen) bei Zeilenänderungen ebenfalls nur langsam aktualisiert werden. Wenn 4 oder 5 dieser großen Dateien geöffnet sind, werden die Dinge mit update_all make noch langsamer. Mit dem obigen Patch tritt das Problem, das @ CAM-Gerlach oben beschreibt, weiterhin bei der großen Datei auf, aber die kleine Datei sollte immer schnell sein.

Ein separates, aber offensichtlich damit verbundenes Problem besteht darin, dass große Dateien (> 2000 Zeilen) bei Zeilenänderungen ebenfalls nur langsam aktualisiert werden. Wenn 4 oder 5 dieser großen Dateien geöffnet sind, werden die Dinge mit update_all make noch langsamer. Mit dem obigen Patch tritt das Problem, das @ CAM-Gerlach oben beschreibt, weiterhin bei der großen Datei auf, aber die kleine Datei sollte immer schnell sein.

Es scheint, dass wir den UI-Blockierungsprozess in einen Thread verschieben müssen.

Es scheint, dass wir den UI-Blockierungsprozess in einen Thread verschieben müssen.

Das wäre am besten. Ich denke, es ist zu diesem Zeitpunkt jedoch mit dem Syntax-Textmarker verbunden.

Ich denke, es ist zu diesem Zeitpunkt jedoch mit dem Syntax-Textmarker verbunden.

Ja, das ist ein Problem, da die Syntax-Highlighter-Infrastruktur von Qt auf dem Hauptthread ausgeführt wird: - \

@bcolsen Zusätzlich zum Aktualisieren der aktuellen Datei sollte diese auch nicht aktualisiert werden, wenn der Gliederungs-Explorer nicht einmal sichtbar ist (wie meine Tests jetzt bestätigen).

Ich habe das gleiche Problem.
Spyder ist extrem langsam geworden.
Ich hoffe, wenn es Pakete gibt, die ich aktualisieren muss.

@NaderNazemi Wie Sie dem Problem

Ich sehe, dass es behoben ist, aber in meiner 4.1.4-Version (wahrscheinlich gibt es neuere Versionen da draußen) tritt das Problem auf, wenn die Kite-Autovervollständigungs-App geschlossen wird.

Hey @DGuidi , danke, dass du uns informiert

Was Kite betrifft, verwende ich es nicht und es ist ein proprietäres Plugin eines Drittanbieters, aber es klingt so, als hätten Sie einen bestimmten Fall isoliert, in dem es langsam ist, was wirklich hilfreich ist, um es zu lösen, also hoffentlich einer ihrer Entwickler oder jemand sonst so geneigt, wird in der Lage sein, herauszufinden, was los ist. Viel Glück!

@ CAM-Gerlach und alle, nur um einige Informationen hinzuzufügen, ich verwende WinPython64-3.8.5.0cod von https://winpython.github.io/. Vielleicht hängt das Problem von einer Konfiguration in diesem Paket oder in meinen Fenstern ab Maschine.
Es fällt mir schwer, die Spyder-Version zu aktualisieren, zumindest bis WinPython aktualisiert ist: Ich kann keine Software auf meinem Computer installieren.

Das Deaktivieren der Kite-Vervollständigung und auch der Fallback-Vervollständigungen funktioniert bei mir NICHT :(

Screenshot_362

@stonebig Gibt es eine Chance, dass Sie etwas darüber wissen?

Vorerst können Sie versuchen, alle Optionen im Menü Source , Preferences > Editor und Preferences > Completion and Introspection deaktivieren, die Sie nicht besonders benötigen, insbesondere Einrückungshandbücher, die zu erheblichen Verzögerungen führen können. Abgesehen davon haben wir eine Reihe von Korrekturen für Spyder 4.2.0 parat oder werden in den nächsten Wochen veröffentlicht, die darauf abzielen, die Leistung des Editors zu verbessern und die meisten Ursachen für die Verlangsamung zu beheben, insbesondere bei größeren Dateien. Aber ohne diese testen zu können, um zu bestätigen, dass sie die Dinge für Sie verbessern, bin ich mir nicht sicher, was ich sonst noch empfehlen soll, sorry.

Hallo @ CAM-Gerlach, 95% der Zeit, in der Windows absolut langsam ist, hängt mit der Antivirenaktivität oder der Speichersättigung zusammen.

Außerdem können optionale Spyder-Plugins die Situation möglicherweise nicht verbessern

Okay danke. Hoffentlich wird 4.2.0 die Situation für

War diese Seite hilfreich?
2 / 5 - 1 Bewertungen