Ipython: 'Unbehandelte Ausnahme in Ereignisschleife' (WinError 995)

Erstellt am 16. Dez. 2019  ·  43Kommentare  ·  Quelle: ipython/ipython

Ich habe vor kurzem angefangen, Ipython zu verwenden. Jetzt bekomme ich oft diese Meldung, wenn ich eine Aktion ausführe, selbst einfache wie das Definieren von Variablen:

Unhandled exception in event loop:
  File "c:\users\USER\appdata\local\programs\python\python38-32\lib\asyncio\proactor_events.py", line 768, in _loop_self_reading
    f.result()  # may raise
  File "c:\users\USER\appdata\local\programs\python\python38-32\lib\asyncio\windows_events.py", line 808, in _poll
    value = callback(transferred, key, ov)
  File "c:\users\USER\appdata\local\programs\python\python38-32\lib\asyncio\windows_events.py", line 457, in finish_recv
    raise ConnectionResetError(*exc.args)

Exception [WinError 995] The I/O operation has been aborted because of either a thread exit or an application request
Press ENTER to continue...

Diese Meldung erscheint manchmal, manchmal nicht, für denselben Befehl (wie xyz = "Hallo"). Keine Ahnung was ich falsch gemacht habe. Der normale Dolmetscher hat dieses Problem nicht. Verwenden von 3.8 und installiertem ipython 7.10.2 über die cmd.

Danke.

Hilfreichster Kommentar

Nach einigen Untersuchungen denke ich, dass es sich um einen Fehler in der Implementierung von Pythons asyncio auf der Windows-Plattform handelt:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18. Dez. 2019, 23:11:46) [MSC v.1916 64 Bit (AMD64)] unter Windows 10 Version 1809 (OS Build 17763.1039)

1) Zur Datei hinzufügenLibasyncioproactor_events.py in der Funktion BaseProactorEventLoop._loop_self_reading nach Zeile 768 den folgenden Code:

766....try:
767........if f is not None:
768............f.result() # may raise
...........if self._stopping:
...............raise exceptions.CancelledError("Event loop is stopping")
769........f = self._proactor.recv(self._ssock, 4096)

2) Testen. Ich habe keine Fehler mehr...

BEARBEITEN: Sie können stattdessen in diesem speziellen Codekontext einfach if self._stopping: return verwenden (sollte etwas schneller sein)

EDIT2: Fehler auf bugs.python.org und Beschreibung dessen, was diesen Fehler verursacht (von jemand anderem gefunden): https://bugs.python.org/issue39010#msg362076

Alle 43 Kommentare

Können Sie versuchen, das Prompt Toolkit auf 2.x herunterzustufen, um festzustellen, ob dies die Ursache ist?

Ich habe ein Downgrade auf Prompt Toolkit 2.0.10 durchgeführt und es hat funktioniert. Ich danke dir sehr.
Könnten Sie bitte sagen, da ich völlig neu in diesem Bereich bin, was sich geändert hat?
Und könnte ich Probleme bekommen, weil ich die Version umkehre?

Prompt_toolkit 3 (die Bibliothek, die IPython mehrzeilige Bearbeitung und syntaktische Färbung ermöglicht) wurde kurz vor IPython 7.10 veröffentlicht; Es versucht, besser mit asyncio eventloop zu spielen, wenn Sie gleichzeitig programmieren. Wir haben unser Bestes getan, um IPython mit dem Prompt-Toolkit 3 kompatibel zu machen, aber es gibt ein paar Grenzfälle, über die wir uns vielleicht noch keine Gedanken gemacht haben.

Mit prompt_toolkit 2.x sollte alles gut funktionieren, und wir werden versuchen herauszufinden, warum Sie den obigen Fehler erhalten haben.

Bei Ihrem aktuellen Fehler ist es schwer zu wissen, woher das genau kommt, aber hoffentlich werden wir in den nächsten Versionen den Grund eingrenzen.

Irgendeine Ahnung, wann das gelöst wird?

Wenn jemand die Zeit findet, zu untersuchen, warum dies passiert und was die Lösung ist; Möglicherweise ist jemand mit einer Windows-Maschine als VM besonders langsam.

Leider machen das alle regulären Maintainer (auch bekannt vor allem ich) in ihrer Freizeit – was selten vorkommt. Ich habe auch keinen Windows-Rechner.

Wenn Sie Hinweise auf Aktionsfolgen finden, die dies immer auslösen, wäre das hilfreich.

Nach einigen Untersuchungen denke ich, dass es sich um einen Fehler in der Implementierung von Pythons asyncio auf der Windows-Plattform handelt:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18. Dez. 2019, 23:11:46) [MSC v.1916 64 Bit (AMD64)] unter Windows 10 Version 1809 (OS Build 17763.1039)

1) Zur Datei hinzufügenLibasyncioproactor_events.py in der Funktion BaseProactorEventLoop._loop_self_reading nach Zeile 768 den folgenden Code:

766....try:
767........if f is not None:
768............f.result() # may raise
...........if self._stopping:
...............raise exceptions.CancelledError("Event loop is stopping")
769........f = self._proactor.recv(self._ssock, 4096)

2) Testen. Ich habe keine Fehler mehr...

BEARBEITEN: Sie können stattdessen in diesem speziellen Codekontext einfach if self._stopping: return verwenden (sollte etwas schneller sein)

EDIT2: Fehler auf bugs.python.org und Beschreibung dessen, was diesen Fehler verursacht (von jemand anderem gefunden): https://bugs.python.org/issue39010#msg362076

MrEightFive Danke für deine Lösung. Es scheint bei mir zu funktionieren

@MrEightFive Danke, habe die Änderung gerade implementiert. Es scheint gut zu funktionieren.

@MrEightFive Sieht so aus, als ob es auch für Python 3.8.2 funktioniert.

Vielen Dank @MrEightFive und @Carreau für Ihre Lösungen, sehr geschätzt, ich hatte das gleiche Problem.

@MrEightFive Sieht so aus, als ob es auch für Python 3.8.2 funktioniert.

Gleiche positive Erfahrung

Gleich, danke!

Auch dieser Begegnung. @MrEightFive Wenn Sie denken, dass Sie wissen, was die Lösung ist, senden Sie vielleicht eine Pull-Anfrage an CPython? :zwinkern:

@segevfiner
Ich bin kein Mitglied der CPython-Entwicklungsgruppe, und laut ihrem Dokument gibt es einen (umfassenden) Überprüfungsprozess, bevor sie Sie einlassen. Es lohnt sich nicht, für mich eine einzelne Pull-Anforderung durchzugehen, obwohl ich es geschafft hätte wenn es einfacher wäre.

Zweitens existiert bereits ein Fehlerbericht dafür auf bugs.python.org (siehe EDIT2 in meinem Beitrag oben), unter einem anderen Titel, aber der Grund für diesen Fehler wird genau so angegeben, wie ich es herausgefunden habe. Also denke ich nicht notwendig zu duplizieren.

Drittens, obwohl meine Problemumgehung funktioniert, habe ich keine Garantie dafür, dass sie keine Nebenwirkungen hat (es gibt einige Abhängigkeiten davon, wie das Herunterfahren der Ereignisschleife in dieser bestimmten Version von asyncio implementiert wird, und das kann sich ändern). Ich habe die Asyncio-Tests von CPython (auf 3.8.1) ausgeführt, und sie waren bestanden, aber ich habe nie darüber hinaus nachgeforscht. Es ist besser, wenn jemand, der tatsächlich an Asyncio arbeitet und sich mit CPython-Code auskennt, dies überprüfen würde.

@ MrEightFive Es ist eigentlich einfacher als Sie denken. Senden Sie einfach eine PR und unterschreiben Sie einen CLA, warten Sie dann auf die Codeüberprüfung usw. Wie jedes andere Projekt in GitHub. Obwohl CPython oft nicht genug Leute zu haben scheint, die Pull-Requests überprüfen, bleiben so viele hängen. Alternativ können Sie einfach Ihre vorgeschlagene Problemumgehung zum Python-Bug-Tracker-Problem posten. Auch wenn Sie sich nicht sicher sind, können Sie dies einfach in der PR/Ausgabe sagen und Ihre Bedenken äußern. Dies hilft oft, jemanden zu finden, der sich mit dem Problem auskennt und den Fix überprüft oder einen besseren/korrekten anbietet. Aber es ist nur ein Vorschlag, mach es nur, wenn du wirklich Lust dazu hast.

Dieser Fehler trat auch bei der Verwendung des promt_toolkits auf, aber die Lösung: MrEightyFive funktioniert fantastisch, hat viel Zeit gespart, danke

Das Hinzufügen von Code zu proactor_events.py (wie MrEightFive vorgeschlagen hat) hat nicht geholfen, aber pip install --upgrade prompt-toolkit==2.0.10 hat es getan. Win10 Python38.

Die Lösung von KyryloKaralyus hat bei mir funktioniert. Eine Sache, die zu beachten ist: Ich habe zuerst versehentlich pip install --upgrade prompt-toolkit==2.0.1 ausgeführt (wobei die 0 am Ende fehlte), und dies führte dazu, dass der Fehler ununterbrochen auftrat. Ich musste das Terminal töten.

Das Hinzufügen von Code zu proactor_events.py (wie MrEightFive vorgeschlagen hat) hat nicht geholfen, aber pip install --upgrade prompt-toolkit==2.0.10 hat es getan. Win10 Python38.

Das hat bei mir funktioniert.

Pull Request wurde schließlich für CPython vorgeschlagen: bpo-39010: Ignore error on cancelled future after end of loop.

Übrigens ist es SEHR schwierig, proactor_events.py zu ändern, wenn Python aus dem MS Store installiert wurde.

图片

Ich habe den Besitzer auf mich geändert und mich und "jeder" auf volle Kontrolle gesetzt. Aber ich kann die Datei immer noch nicht bearbeiten, auch nicht im abgesicherten Modus und "Wiederholen als Administrator".

Ich habe ein Downgrade auf Prompt Toolkit 2.0.10 durchgeführt und es hat funktioniert. Ich danke dir sehr.

pip install prompt-toolkit==2.0.10

Ich bekomme diese Ausnahme mit python 3.8.3, ipython 7.13.0, prompt_toolkit 3.0.5

Übrigens ist es SEHR schwierig, proactor_events.py zu ändern, wenn Python aus dem MS Store installiert wurde.

Der einfachere Weg besteht darin, das gesamte asyncio-Paket in Ihr Projekt zu kopieren und dort zu ändern und sich dann auf Python zu verlassen, um das gesamte Modul zu spiegeln. Windows Store-Apps sind _sehr_ gut geschützt.

Aber ich verfolge auch den CPython-Patch.

Nach einigen Untersuchungen denke ich, dass es sich um einen Fehler in der Implementierung von Pythons asyncio auf der Windows-Plattform handelt:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18. Dez. 2019, 23:11:46) [MSC v.1916 64 Bit (AMD64)] unter Windows 10 Version 1809 (OS Build 17763.1039)

  1. Zur Datei hinzufügenLibasyncioproactor_events.py in der Funktion BaseProactorEventLoop._loop_self_reading nach Zeile 768 den folgenden Code:

766....try:
767........if f is not None:
768............f.result() # may raise
...........if self._stopping:
...............raise exceptions.CancelledError("Event loop is stopping")
769........f = self._proactor.recv(self._ssock, 4096)

  1. Prüfen. Ich habe keine Fehler mehr...

BEARBEITEN: Sie können stattdessen in diesem speziellen Codekontext einfach if self._stopping: return verwenden (sollte etwas schneller sein)

EDIT2: Fehler auf bugs.python.org und Beschreibung dessen, was diesen Fehler verursacht (von jemand anderem gefunden): https://bugs.python.org/issue39010#msg362076

hat bei mir auch funktioniert!!
Vielen Dank!!

Ich habe ein Downgrade auf Prompt Toolkit 2.0.10 durchgeführt und es hat funktioniert. Ich danke dir sehr.

pip install prompt-toolkit==2.0.10

Tausend Dank, das hat bei mir funktioniert:

conda install prompt_toolkit=2.0.10

Können Sie versuchen, das Prompt Toolkit auf 2.x herunterzustufen, um festzustellen, ob dies die Ursache ist

Das hat mir auch geholfen, danke!

pip install --upgrade prompt-toolkit==2.0.10

Vielen Dank, ich habe endlich die obige Lösung auf meinem Gerät!

Ich habe versucht, Folgendes zu tun, aber ich bekam immer [Errno 13] Permission denied

  1. Zur Datei hinzufügenLibasyncioproactor_events.py in der Funktion BaseProactorEventLoop._loop_self_reading nach Zeile 768 den folgenden Code:

Dies wurde in 3.9rc2 behoben

@imba-tjd Wird es auf ältere Python-Versionen zurückportiert? (Oder schon?)

Von den Python-Bugs sieht es so aus, als wäre es auf 3.8 zurückportiert worden.

Ich erhalte den Fehler auch mit 3.9rc2 ...

Können Sie versuchen, das Prompt Toolkit auf 2.x herunterzustufen, um festzustellen, ob dies die Ursache ist?

Das hat geholfen, danke.

Ich frage mich, ob dies jetzt in Python 3.8.6 und 3.9 behoben ist.

Nach einigen Untersuchungen denke ich, dass es sich um einen Fehler in der Implementierung von Pythons asyncio auf der Windows-Plattform handelt:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18. Dez. 2019, 23:11:46) [MSC v.1916 64 Bit (AMD64)] unter Windows 10 Version 1809 (OS Build 17763.1039)

  1. Zur Datei hinzufügenLibasyncioproactor_events.py in der Funktion BaseProactorEventLoop._loop_self_reading nach Zeile 768 den folgenden Code:

766....try:
767........if f is not None:
768............f.result() # may raise
...........if self._stopping:
...............raise exceptions.CancelledError("Event loop is stopping")
769........f = self._proactor.recv(self._ssock, 4096)

  1. Prüfen. Ich habe keine Fehler mehr...

BEARBEITEN: Sie können stattdessen in diesem speziellen Codekontext einfach if self._stopping: return verwenden (sollte etwas schneller sein)

EDIT2: Fehler auf bugs.python.org und Beschreibung dessen, was diesen Fehler verursacht (von jemand anderem gefunden): https://bugs.python.org/issue39010#msg362076

Ich habe dieses Problem mit einer Neuinstallation von Python 3.8.3 mit Anaconda unter Windows 10 und die Problemumgehung von @MrEightFive hat für mich einwandfrei funktioniert!

pip install --upgrade prompt-toolkit==2.0.10
Dies hat bei mir unter Windows Anaconda3-2020.11 funktioniert.

Dies hat (so ziemlich) für mich unter Windows 10, Anaconda Individual Edition 2020.11 funktioniert.

Wenn Sie ein anderer Anaconda-Benutzer sind, möchten Sie dieses Update möglicherweise in der Conda-Umgebung behalten:
conda install -c conda-forge prompt_toolkit

Was bei mir funktioniert hat.

Es erscheint sofort, nachdem ich einen try-except-block ausgeführt habe , in anderen Fällen ist es unvorhersehbar

Ich möchte nur den deutschen Fehlertext hinzufügen, damit dies von mehr Benutzern gefunden wird. (Windows 10 Pro, Version 2004)

Unbehandelte Ausnahme in Ereignisschleife:
Datei „c:usersuserappdatalocalprogramspythonpython38libasyncioproactor_events.py“, Zeile 768, in _loop_self_reading
f.result() # kann erhöhen
Datei „c:usersuserappdatalocalprogramspythonpython38libasynciowindows_events.py“, Zeile 808, in _poll
Wert = Rückruf (übertragen, Schlüssel, ov)
Datei „c:usersuserappdatalocalprogramspythonpython38libasynciowindows_events.py“, Zeile 457, in finish_recv
Erhöhen ConnectionResetError(*exc.args)

Exception [WinError 995] Der E/A-Vorgang wurde wegen eines Threadendes oder einer Anwendungsanforderung abgebrochen
Drücken Sie ENTER, um fortzufahren...

Leider

conda install -c conda-forge prompt_toolkit

hat das Problem bei mir nicht behoben.

@musm , müssen Sie prompt_toolkit v2 angeben.

conda install -c conda-forge prompt_toolkit=2

Ich mache gerade Anaconda 2020.11

conda install -c conda-forge prompt_toolkit=2

Führt zu massiven Konflikten:

> conda install -c conda-forge prompt_toolkit=2
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: \
Found conflicts! Looking for incompatible packages.
This can take several minutes.  Press CTRL-C to abort.
Examining qtpy:   1%|▌                                                                 | 3/327 [00:00<00:20, 16.00it/s]\Examining statsmodels:   1%|▌                                                          | 3/327 [00:00<00:20, 16.00it/s]/Examining ipython_genutils:   3%|█▌                                                   | 10/327 [00:07<04:17,  1.23it/s]|Examining pyflakes:   5%|██▉                                                          | 16/327 [00:10<02:19,  2.22it/s]|Examining zope.event:   7%|████▏                                                      | 23/327 [00:13<02:18,  2.20it/s]\Examining vs2015_runtime:  11%|██████                                                 | 36/327 [00:17<02:29,  1.94it/s]\Examining mpir:  15%|█████████▌                                                       | 48/327 [01:32<37:15,  8.01s/it]\Examining krb5:  17%|███████████▎                                                     | 57/327 [01:38<06:35,  1.47s/it]-Examining prometheus_client:  18%|█████████▌                                          | 60/327 [01:42<09:06,  2.05s/it]|Examining cython:  19%|████████████▏                                                  | 63/327 [01:47<08:58,  2.04s/it]-Examining flake8:  21%|█████████████                                                  | 68/327 [02:37<24:45,  5.73s/it]-Examining pytest:  25%|███████████████▊                                               | 82/327 [03:30<30:07,  7.38s/it]-Examining openpyxl:  26%|███████████████▊                                             | 85/327 [03:51<25:16,  6.27s/it]\Examining beautifulsoup4:  32%|█████████████████▎                                    | 105/327 [04:08<03:40,  1.01it/s]|Examining html5lib:  35%|████████████████████▉                                       | 114/327 [04:11<01:34,  2.25it/s]/Examining console_shortcut:  35%|██████████████████▏                                 | 114/327 [04:11<01:34,  2.25it/s]-Examining qt:  37%|████████████████████████▌                                         | 122/327 [04:14<01:09,  2.94it/s]/Examining wheel:  38%|████████████████████████                                       | 125/327 [04:14<00:54,  3.71it/s]|Examining greenlet:  39%|███████████████████████▍                                    | 128/327 [04:18<03:24,  1.03s/it]\Examining bokeh:  40%|█████████████████████████                                      | 130/327 [04:19<02:27,  1.33it/s]|Examining bleach:  40%|████████████████████████▊                                     | 131/327 [04:37<19:29,  5.97s/it]|Examining entrypoints:  40%|███████████████████████                                  | 132/327 [04:39<15:25,  4.75s/it]|Examining et_xmlfile:  40%|███████████████████████▍                                  | 132/327 [04:39<15:25,  4.75s/it]/Examining rtree:  42%|██████████████████████████▏                                    | 136/327 [04:39<07:31,  2.37s/it]-Examining backcall:  42%|████████████████████████▉                                   | 136/327 [04:39<07:31,  2.37s/it]\Examining libssh2:  45%|███████████████████████████▌                                 | 148/327 [04:58<06:13,  2.09s/it]\Examining path:  52%|█████████████████████████████████▍                              | 171/327 [05:54<23:54,  9.19s/it]/Examining pywavelets:  53%|██████████████████████████████▌                           | 172/327 [05:55<16:51,  6.53s/it]-Examining importlib_metadata:  54%|███████████████████████████▏                      | 178/327 [06:06<07:34,  3.05s/it]-Examining prompt_toolkit=2:  55%|████████████████████████████▍                       | 179/327 [06:07<07:56,  3.22s/it]-Examining seaborn:  56%|██████████████████████████████████▏                          | 183/327 [06:17<06:30,  2.71s/it]\Examining jupyterlab_widgets:  57%|████████████████████████████▎                     | 185/327 [06:21<05:57,  2.52s/it]|Examining jdcal:  58%|████████████████████████████████████▍                          | 189/327 [06:21<02:55,  1.27s/it]-Examining widgetsnbextension:  59%|█████████████████████████████▌                    | 193/327 [06:22<01:18,  1.70it/s]-Examining multipledispatch:  64%|█████████████████████████████████▍                  | 210/327 [07:07<03:36,  1.85s/it]-Examining yaml:  68%|███████████████████████████████████████████▍                    | 222/327 [07:19<01:11,  1.46it/s]-Examining libxslt:  70%|██████████████████████████████████████████▌                  | 228/327 [07:31<03:34,  2.17s/it]\Examining python-jsonrpc-server:  70%|████████████████████████████████▉              | 229/327 [07:31<02:30,  1.54s/it]|Examining typed-ast:  71%|█████████████████████████████████████████▊                 | 232/327 [07:32<01:01,  1.54it/s]\Examining @/win-64::__archspec==1=x86_64:  71%|██████████████████████████▉           | 232/327 [07:32<01:01,  1.54it/s]|Examining urllib3:  73%|████████████████████████████████████████████▍                | 238/327 [07:42<03:30,  2.36s/it]/Examining backports:  73%|███████████████████████████████████████████                | 239/327 [07:47<04:20,  2.96s/it]\Examining mccabe:  76%|███████████████████████████████████████████████▏          

Hallo @musm , dies ist einer der Nachteile bei der Verwendung der vollständigen Anaconda-Distribution. Es gibt so viele Module, dass es schwierig sein kann, alle ihre Abhängigkeiten gleichzeitig aufzulösen, wenn Sie von der bereitgestellten Distribution abweichen. Sie können stattdessen Miniconda ausprobieren, das Conda ist, jedoch ohne die vorinstallierten Module. Damit erstellen Sie Umgebungen, die genau die Module enthalten, die Sie für Ihr Projekt benötigen.

Ich habe das nicht ausprobiert, aber es ist möglich, dass Sie dies auch tun können, ohne Anaconda deinstallieren und stattdessen Miniconda installieren zu müssen. IE Erstellen Sie eine neue Umgebung von Grund auf neu, die nur bestimmte Module enthält. Versuchen Sie es mit einem Befehl wie dem folgenden (bearbeiten Sie die Modulnamen so, dass sie das enthalten, was Sie wirklich brauchen).

conda create -n <myenv> python ipython prompt_toolkit=2 jupyter pandas numpy scipy scikit-learn matplotlib
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen