Ipython: «Необработанное исключение в цикле событий» (WinError 995)

Созданный на 16 дек. 2019  ·  43Комментарии  ·  Источник: ipython/ipython

Недавно я начал использовать ipython. Теперь я часто получаю это сообщение при выполнении любого действия, даже простого, такого как определение переменных:

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...

Это сообщение иногда появляется, иногда нет, для одной и той же команды (например, xyz = "hello"). Понятия не имею, что я сделал не так. Обычный интерпретатор не имеет этой проблемы. Используя 3.8 и установленный ipython 7.10.2 через cmd.

Спасибо.

Самый полезный комментарий

После некоторого расследования я думаю, что это ошибка в реализации асинхронности Python на платформе Windows:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18 декабря 2019 г., 23:11:46) [MSC v.1916 64 бит (AMD64)] в Windows 10 версии 1809 (сборка ОС 17763.1039)

1) Добавить в файлLibasyncioproactor_events.py в функции BaseProactorEventLoop._loop_self_reading после строки 768 следующий код:

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) Тест. У меня больше нет ошибок...

РЕДАКТИРОВАТЬ: вместо этого вы можете просто использовать if self._stopping: return в этом конкретном контексте кода (должно быть немного быстрее)

EDIT2: ошибка на bugs.python.org и описание причины этой ошибки (найдено кем-то другим): https://bugs.python.org/issue39010#msg362076

Все 43 Комментарий

Можете ли вы попробовать понизить версию инструментария подсказок до версии 2.x, чтобы узнать, не в этом ли причина?

Я сделал понижение до версии 2.0.10, и это сработало. Большое спасибо.
Не могли бы вы сказать, поскольку я совершенно новичок в этом, что изменилось?
А могут ли у меня быть проблемы из-за реверса версии?

Prompt_toolkit 3 (библиотека, которая позволяет IPython иметь многострочное редактирование и синтаксическую окраску) была выпущена непосредственно перед IPython 7.10; он пытается лучше работать с асинхронным циклом событий, если вы выполняете параллельное программирование. Мы сделали все возможное, чтобы сделать IPython совместимым с набором инструментов подсказок 3, но есть несколько пограничных случаев, о которых мы, возможно, не знали.

Все должно нормально работать с prompt_toolkit 2.x, и мы постараемся выяснить, почему у вас возникла вышеуказанная ошибка.

С вашей текущей ошибкой трудно понять, откуда именно это происходит, но, надеюсь, в следующих нескольких выпусках мы сузим причину.

Есть идеи, когда это будет решено?

Когда кто-то находит время, чтобы выяснить, почему это происходит и как это исправить; потенциально кто-то с машиной Windows, поскольку виртуальная машина работает особенно медленно.

К сожалению, все постоянные сопровождающие (в основном я) занимаются этим в свободное время, что бывает редко. У меня также нет машины Windows.

Если вы найдете какие-либо подсказки, последовательности действий, которые всегда вызывают это, это поможет.

После некоторого расследования я думаю, что это ошибка в реализации асинхронности Python на платформе Windows:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18 декабря 2019 г., 23:11:46) [MSC v.1916 64 бит (AMD64)] в Windows 10 версии 1809 (сборка ОС 17763.1039)

1) Добавить в файлLibasyncioproactor_events.py в функции BaseProactorEventLoop._loop_self_reading после строки 768 следующий код:

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) Тест. У меня больше нет ошибок...

РЕДАКТИРОВАТЬ: вместо этого вы можете просто использовать if self._stopping: return в этом конкретном контексте кода (должно быть немного быстрее)

EDIT2: ошибка на bugs.python.org и описание причины этой ошибки (найдено кем-то другим): https://bugs.python.org/issue39010#msg362076

MrEightFive Спасибо за ваше исправление. Кажется, это работает для меня.

@MrEightFive Спасибо, только что внес изменения. Кажется, он работает нормально.

@MrEightFive Похоже, это работает и для Python 3.8.2.

Спасибо @MrEightFive и @Carreau за ваши решения, очень признателен, у меня была такая же проблема.

@MrEightFive Похоже, это работает и для Python 3.8.2.

Тот же положительный опыт

То же, спасибо!

Встречается и с этим. @MrEightFive , если вы думаете, что знаете, что это за исправление, может быть, отправьте запрос на включение в CPython? :подмигивание:

@segevfiner
Я не являюсь членом группы разработчиков CPython, и, согласно их документу, существует (обширный) процесс проверки, прежде чем они вас впустят. Мне не стоит проходить один запрос на включение, хотя я бы сделал это если бы было проще.

Во-вторых, отчет об ошибке для этого уже существует на bugs.python.org (см. EDIT2 в моем посте выше) под другим заголовком, но причина этой ошибки указана точно так, как я узнал. Так что думаю дублировать не надо.

В-третьих, хотя мой обходной путь работает, у меня нет гарантии, что он не имеет побочных эффектов (у него есть некоторые зависимости от того, как завершение цикла событий реализовано в этой конкретной версии asyncio, и это может измениться). Я провел асинхронные тесты CPython (в версии 3.8.1), и они прошли, но я никогда не исследовал их дальше. Лучше, если это проверит кто-то, кто действительно работает с asyncio и хорошо разбирается в коде CPython.

@MrEightFive На самом деле это проще, чем вы думаете. Просто отправьте PR и подпишите CLA, затем дождитесь проверки кода и т. д. Как и любой другой проект на GitHub. Хотя у CPython часто не хватает людей, просматривающих запросы на вытягивание, поэтому многие остаются зависшими. В качестве альтернативы вы можете просто опубликовать предлагаемый обходной путь для проблемы отслеживания ошибок Python. Даже если вы не уверены, вы можете просто сказать об этом в PR/вопросе, высказав свои опасения по этому поводу. Это часто помогает найти кого-то более знакомого, чтобы посмотреть на проблему и проверить исправление или предложить лучшее/правильное решение. Но это всего лишь предложение, делайте это, только если вам действительно хочется.

Подключено здесь к системе отслеживания ошибок Python Issue39010 — ProactorEventLoop вызывает необработанный ConnectionResetError — msg366002

эта ошибка возникает также при использовании promt_toolkit, но решение: MrEightyFive работает фантастически, сэкономил много времени, спасибо

добавление кода в proactor_events.py (как предложил MrEightFive) не помогло, но pip install --upgrade prompt-toolkit==2.0.10 помогло. Вин10 Питон38.

Решение KyryloKaralyus сработало для меня. Следует отметить одну вещь: я сначала случайно запустил (пропустив 0 в конце) pip install --upgrade prompt-toolkit==2.0.1, и это привело к тому, что ошибка начала возникать без остановок. Пришлось убить терминал.

добавление кода в proactor_events.py (как предложил MrEightFive) не помогло, но pip install --upgrade prompt-toolkit==2.0.10 помогло. Вин10 Питон38.

Это сработало для меня.

Наконец, для CPython был предложен запрос на вытягивание: bpo-39010: Игнорировать ошибку при отмене будущего после окончания цикла.

Кстати, ОЧЕНЬ сложно изменить proactor_events.py , если python был установлен из MS Store.

图片

Я сменил владельца на себя и поставил себе и "всем" полный контроль. Но я все еще не могу отредактировать файл, даже в безопасном режиме и «повторить попытку от имени администратора».

Я сделал понижение до версии 2.0.10, и это сработало. Большое спасибо.

pip install prompt-toolkit==2.0.10

Я получаю это исключение с python 3.8.3, ipython 7.13.0, prompt_toolkit 3.0.5

Кстати, ОЧЕНЬ сложно изменить proactor_events.py , если python был установлен из MS Store.

Более простой способ — скопировать весь пакет asyncio в свой проект и изменить его там, а затем положиться на то, что Python затенит весь модуль. Приложения Магазина Windows _очень_ хорошо защищены.

Но я также слежу за патчем CPython.

После некоторого расследования я думаю, что это ошибка в реализации асинхронности Python на платформе Windows:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18 декабря 2019 г., 23:11:46) [MSC v.1916 64 бит (AMD64)] в Windows 10 версии 1809 (сборка ОС 17763.1039)

  1. Добавить в файлLibasyncioproactor_events.py в функции BaseProactorEventLoop._loop_self_reading после строки 768 следующий код:

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. Контрольная работа. У меня больше нет ошибок...

РЕДАКТИРОВАТЬ: вместо этого вы можете просто использовать if self._stopping: return в этом конкретном контексте кода (должно быть немного быстрее)

EDIT2: ошибка на bugs.python.org и описание причины этой ошибки (найдено кем-то другим): https://bugs.python.org/issue39010#msg362076

у меня тоже работало!!
Спасибо!!

Я сделал понижение до версии 2.0.10, и это сработало. Большое спасибо.

pip install prompt-toolkit==2.0.10

Большое спасибо, это сработало для меня:

conda установить prompt_toolkit = 2.0.10

Можете ли вы попробовать понизить версию инструментария подсказок до версии 2.x, чтобы узнать, не является ли это причиной?

Мне это тоже помогло, спасибо!

pip install --upgrade prompt-toolkit==2.0.10

Большое спасибо, у меня наконец-то есть вышеуказанное решение, работающее на моем устройстве!

Я пытался сделать следующее, но всегда получал [Errno 13] Отказано в доступе

  1. Добавить в файлLibasyncioproactor_events.py в функции BaseProactorEventLoop._loop_self_reading после строки 768 следующий код:

Это было исправлено в 3.9rc2.

@imba-tjd Будет ли он обратно портирован на более старые версии Python? (Или уже есть?)

судя по ошибкам Python, похоже, что он был перенесен на версию 3.8.

Я получаю сообщение об ошибке даже с 3.9rc2...

Можете ли вы попробовать понизить версию инструментария подсказок до версии 2.x, чтобы узнать, не в этом ли причина?

Это помогло, спасибо.

Интересно, исправлено ли это сейчас в Python 3.8.6 и 3.9.

После некоторого расследования я думаю, что это ошибка в реализации асинхронности Python на платформе Windows:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18 декабря 2019 г., 23:11:46) [MSC v.1916 64 бит (AMD64)] в Windows 10 версии 1809 (сборка ОС 17763.1039)

  1. Добавить в файлLibasyncioproactor_events.py в функции BaseProactorEventLoop._loop_self_reading после строки 768 следующий код:

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. Контрольная работа. У меня больше нет ошибок...

РЕДАКТИРОВАТЬ: вместо этого вы можете просто использовать if self._stopping: return в этом конкретном контексте кода (должно быть немного быстрее)

EDIT2: ошибка на bugs.python.org и описание причины этой ошибки (найдено кем-то другим): https://bugs.python.org/issue39010#msg362076

У меня возникла эта проблема с чистой установкой Python 3.8.3 с использованием Anaconda в Windows 10, и обходной путь от @MrEightFive отлично сработал для меня!

pip install --upgrade prompt-toolkit == 2.0.10
У меня это сработало в версии Windows Anaconda3-2020.11.

Это (в значительной степени) сработало для меня в Windows 10, Anaconda Individual Edition 2020.11.

Если вы являетесь другим пользователем Anaconda, вы можете сохранить это обновление в среде conda:
conda install -c conda-forge prompt_toolkit

Что сработало для меня.

Это происходит сразу после того, как я выполняю блок try-except-block , в других случаях это непредсказуемо.

Просто хочу добавить текст ошибки на немецком языке, чтобы его нашло больше пользователей. (Windows 10 Pro, версия 2004 г.)

Необработанное исключение в цикле событий:
Файл «c:usersuserappdatalocalprogramspythonpython38libasyncioproactor_events.py», строка 768, в _loop_self_reading
f.result() # может повыситься
Файл «c:usersuserappdatalocalprogramspythonpython38libasynciowindows_events.py», строка 808, в _poll
значение = обратный вызов (передано, ключ, ов)
Файл «c:usersuserappdatalocalprogramspythonpython38libasynciowindows_events.py», строка 457, в finish_recv
поднять ConnectionResetError(*exc.args)

Исключение [WinError 995] Der E/A-Vorgang wurde wegen eines Threadendes oder einer Anwendungsanforderung abgebrochen
Нажмите ENTER, чтобы продолжить...

Грустно

conda install -c conda-forge prompt_toolkit

не решил проблему для меня.

@musm , вам нужно указать prompt_toolkit v2.

conda install -c conda-forge prompt_toolkit=2

Я на Анаконде 2020.11 делаю

conda install -c conda-forge prompt_toolkit=2

Ведет к массовым конфликтам:

> 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%|███████████████████████████████████████████████▏          

Привет @musm , это один из недостатков использования полного дистрибутива Anaconda. Модулей так много, что может быть сложно разрешить все их зависимости одновременно, если вы отклонитесь от предоставленного дистрибутива. Вместо этого вы можете попробовать Miniconda, то есть Conda, но без предустановленных модулей. С его помощью вы создаете среду, включающую только те модули, которые вам нужны для вашего проекта.

Я не пробовал это, но возможно, вы также сможете сделать это, не удаляя Anaconda и вместо этого устанавливая Miniconda. IE Создайте новую среду с нуля, включающую только определенные модули. Попробуйте это с помощью следующей команды (отредактируйте имена модулей, чтобы включить то, что вам действительно нужно).

conda create -n <myenv> python ipython prompt_toolkit=2 jupyter pandas numpy scipy scikit-learn matplotlib
Была ли эта страница полезной?
0 / 5 - 0 рейтинги