Ipython: 'Exceção não tratada no loop de eventos' (WinError 995)

Criado em 16 dez. 2019  ·  43Comentários  ·  Fonte: ipython/ipython

Comecei a usar o ipython recentemente. Agora, muitas vezes recebo esta mensagem ao fazer qualquer ação, mesmo as simples, como definir variáveis:

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

Esta mensagem às vezes aparece, às vezes não, para o mesmo comando (como xyz = "hello"). Não faz ideia do que fiz de errado. O intérprete normal não tem esse problema. Usando 3.8 e instalado o ipython 7.10.2 através do cmd.

Obrigado.

Comentários muito úteis

Após alguma investigação, acho que é um bug na implementação da plataforma Windows do assíncrono do Python:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18 de dezembro de 2019, 23:11:46) [MSC v.1916 64 bits (AMD64)] no Windows 10 versão 1809 (SO Build 17763.1039)

1) Adicionar ao arquivoLibasyncioproactor_events.py na função BaseProactorEventLoop._loop_self_reading após a linha 768 o seguinte código:

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) Teste. não tenho mais erros...

EDIT: você pode simplesmente usar if self._stopping: return neste contexto de código específico (deve ser um pouco mais rápido)

EDIT2: Bug em bugs.python.org e descrição do que está causando esse erro (encontrado por outra pessoa): https://bugs.python.org/issue39010#msg362076

Todos 43 comentários

Você pode tentar fazer downgrade do kit de ferramentas de prompt para 2.x para ver se esta é a causa?

Eu fiz downgrade para prompt toolkit 2.0.10 e funcionou. Muito obrigado.
Você poderia dizer, como sou completamente novo nisso, o que mudou?
E eu poderia ter problemas por causa da reversão da versão?

O Prompt_toolkit 3 (a biblioteca que permite que o IPython tenha edição de várias linhas e coloração sintática) foi lançado pouco antes do IPython 7.10; ele tenta jogar melhor com asyncio eventloop se você fizer alguma programação simultânea. Fizemos o nosso melhor para tornar o IPython compatível com o prompt toolkit 3, mas há alguns casos extremos que talvez não tenhamos pensado.

Tudo deve funcionar bem com o prompt_toolkit 2.x, e tentaremos descobrir por que você recebeu o erro acima.

Com o seu erro atual, é difícil saber de onde exatamente isso está vindo, mas esperamos que nas próximas versões apuremos o motivo.

Alguma ideia de quando isso vai ser resolvido?

Quando alguém encontra tempo para investigar por que isso acontece e qual é a correção; potencialmente alguém com uma máquina Windows como VM é particularmente lento.

Infelizmente, todos os mantenedores regulares (principalmente eu), estão fazendo isso em seu tempo livre – o que é raro. Eu também não tenho uma máquina Windows.

Se você encontrar alguma pista, de sequências de ações que sempre acionam isso, ajudaria.

Após alguma investigação, acho que é um bug na implementação da plataforma Windows do assíncrono do Python:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18 de dezembro de 2019, 23:11:46) [MSC v.1916 64 bits (AMD64)] no Windows 10 versão 1809 (SO Build 17763.1039)

1) Adicionar ao arquivoLibasyncioproactor_events.py na função BaseProactorEventLoop._loop_self_reading após a linha 768 o seguinte código:

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) Teste. não tenho mais erros...

EDIT: você pode simplesmente usar if self._stopping: return neste contexto de código específico (deve ser um pouco mais rápido)

EDIT2: Bug em bugs.python.org e descrição do que está causando esse erro (encontrado por outra pessoa): https://bugs.python.org/issue39010#msg362076

MrEightFive Obrigado por sua correção .. Parece estar funcionando para mim

@MrEightFive Obrigado, acabei de implementar a mudança. Parece estar funcionando muito bem.

@MrEightFive Parece que também funciona para o Python 3.8.2.

Obrigado @MrEightFive e @Carreau por suas soluções, muito apreciado, eu tive o mesmo problema.

@MrEightFive Parece que também funciona para o Python 3.8.2.

Mesma experiência positiva

Igual, obrigado!

Encontrando isso também. @MrEightFive se você acha que sabe qual é a correção, talvez envie uma solicitação de pull para o CPython? :piscar:

@segevfiner
Não sou membro do grupo de desenvolvimento do CPython e, de acordo com o documento, há um processo (extenso) de verificação antes de deixá-lo entrar. Não vale a pena passar por uma única solicitação de pull, embora eu tenha feito isso se fosse mais fácil.

Segundo, o relatório de bug para isso já existe em bugs.python.org (veja EDIT2 no meu post acima), com um título diferente, mas o motivo desse bug é declarado exatamente como descobri. Então eu acho que não é necessário duplicar.

Terceiro, embora minha solução alternativa funcione, não tenho garantia de que ela não tenha efeitos colaterais (ela tem algumas dependências de como o desligamento do loop de eventos é implementado nessa versão específica do assíncrono e isso pode mudar). Executei os testes assíncronos do CPython (em 3.8.1) e eles passaram, mas nunca investiguei além disso. É melhor se alguém realmente trabalhando em assíncrono e bem versado em código CPython verificar isso.

@MrEightFive É realmente mais simples do que você pensa. Basta enviar um PR e assinar um CLA, depois aguardar a revisão do código etc. Como qualquer outro projeto no GitHub. Embora o CPython muitas vezes não pareça ter pessoas suficientes revisando solicitações de pull, muitos ficam pendurados. Alternativamente, você pode simplesmente postar sua solução sugerida para o problema do rastreador de bugs do Python. Mesmo que você não tenha certeza, você pode simplesmente dizer isso no PR/edição, levantando suas preocupações sobre isso. Isso geralmente ajuda alguém mais familiarizado a analisar o problema e verificar a correção ou oferecer uma melhor/correta. Mas é só uma sugestão, faça só se realmente tiver vontade.

este erro também foi gerado ao usar o promt_toolkit, mas a solução: MrEightyFive funciona fantástico, economizou muito tempo, obrigado

adicionar código a proactor_events.py (como MrEightFive sugeriu) não ajudou, mas pip install --upgrade prompt-toolkit==2.0.10 ajudou . Win10 Python38.

A solução de KyryloKaralyus funcionou para mim. Uma coisa a notar - primeiro executei acidentalmente (faltando o 0 no final) pip install --upgrade prompt-toolkit==2.0.1 e isso fez com que o erro começasse a ocorrer sem parar. Eu tive que matar o terminal.

adicionar código a proactor_events.py (como MrEightFive sugeriu) não ajudou, mas pip install --upgrade prompt-toolkit==2.0.10 ajudou . Win10 Python38.

Isso funcionou para mim.

A solicitação de pull foi finalmente proposta para CPython: bpo-39010: Ignore error on cancel future after end of loop.

BTW, é MUITO difícil modificar proactor_events.py se o python foi instalado na MS Store.

图片

Mudei o proprietário para mim e defini eu e "todos" para controle total. Mas ainda não consigo editar o arquivo, mesmo no modo de segurança e "tentar novamente como administrador".

Eu fiz downgrade para prompt toolkit 2.0.10 e funcionou. Muito obrigado.

pip install prompt-toolkit==2.0.10

Estou recebendo essa exceção com python 3.8.3, ipython 7.13.0, prompt_toolkit 3.0.5

BTW, é MUITO difícil modificar proactor_events.py se o python foi instalado na MS Store.

A maneira mais fácil é copiar todo o pacote assíncrono em seu projeto e modificá-lo lá, depois confiar no Python para sombrear todo o módulo. Os aplicativos da Windows Store são _muito_ bem protegidos.

Mas também estou acompanhando o patch do CPython.

Após alguma investigação, acho que é um bug na implementação da plataforma Windows do assíncrono do Python:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18 de dezembro de 2019, 23:11:46) [MSC v.1916 64 bits (AMD64)] no Windows 10 versão 1809 (SO Build 17763.1039)

  1. Adicionar ao arquivoLibasyncioproactor_events.py na função BaseProactorEventLoop._loop_self_reading após a linha 768 o seguinte código:

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. Teste. não tenho mais erros...

EDIT: você pode simplesmente usar if self._stopping: return neste contexto de código específico (deve ser um pouco mais rápido)

EDIT2: Bug em bugs.python.org e descrição do que está causando esse erro (encontrado por outra pessoa): https://bugs.python.org/issue39010#msg362076

funcionou para mim também!!
THX!!

Eu fiz downgrade para prompt toolkit 2.0.10 e funcionou. Muito obrigado.

pip install prompt-toolkit==2.0.10

Muito obrigado, isso funcionou para mim:

conda instalar prompt_toolkit=2.0.10

Você pode tentar fazer o downgrade do kit de ferramentas do prompt para 2.x para ver se essa é a causa

Isso me ajudou também, obrigado!

pip install --upgrade prompt-toolkit==2.0.10

Muito obrigado, finalmente tenho a solução acima funcionando no meu dispositivo !!

Eu tentei fazer o seguinte, mas sempre recebia [Errno 13] Permissão negada

  1. Adicionar ao arquivoLibasyncioproactor_events.py na função BaseProactorEventLoop._loop_self_reading após a linha 768 o seguinte código:

Isso foi corrigido no 3.9rc2

@imba-tjd Será portado de volta para versões mais antigas do Python? (Ou já foi?)

dos bugs do python, parece que foi retroportado no 3.8.

Estou recebendo o erro mesmo com 3.9rc2...

Você pode tentar fazer downgrade do kit de ferramentas de prompt para 2.x para ver se essa é a causa?

Isso ajudou, obrigado.

Gostaria de saber se isso agora está corrigido no Python 3.8.6 e 3.9.

Após alguma investigação, acho que é um bug na implementação da plataforma Windows do assíncrono do Python:

Python 3.8.1 (tags/v3.8.1:1b293b6, 18 de dezembro de 2019, 23:11:46) [MSC v.1916 64 bits (AMD64)] no Windows 10 versão 1809 (SO Build 17763.1039)

  1. Adicionar ao arquivoLibasyncioproactor_events.py na função BaseProactorEventLoop._loop_self_reading após a linha 768 o seguinte código:

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. Teste. não tenho mais erros...

EDIT: você pode simplesmente usar if self._stopping: return neste contexto de código específico (deve ser um pouco mais rápido)

EDIT2: Bug em bugs.python.org e descrição do que está causando esse erro (encontrado por outra pessoa): https://bugs.python.org/issue39010#msg362076

Eu tive esse problema com uma instalação limpa do Python 3.8.3 usando o Anaconda no Windows 10 e a solução alternativa do @MrEightFive funcionou perfeitamente para mim!

pip install --upgrade prompt-toolkit==2.0.10
Isso funcionou para mim na versão Windows Anaconda3-2020.11.

Isso (praticamente) funcionou para mim no Windows 10, Anaconda Individual Edition 2020.11 .

Se você é um usuário do Anaconda, você pode querer manter esta atualização no ambiente do conda:
conda install -c conda-forge prompt_toolkit

O que funcionou para mim.

Ele aparece instantaneamente depois que eu executo um try-except-block , em outros casos é imprevisível

Só quero adicionar o texto do erro alemão, para que isso seja encontrado por mais usuários. (Windows 10 Pro, Versão 2004)

Exceção não tratada no loop de eventos:
Arquivo "c:usersuserappdatalocalprogramspythonpython38libasyncioproactor_events.py", linha 768, em _loop_self_reading
f.result() # pode aumentar
Arquivo "c:usersuserappdatalocalprogramspythonpython38libasynciowindows_events.py", linha 808, em _poll
valor = callback(transferido, chave, ov)
Arquivo "c:usersuserappdatalocalprogramspythonpython38libasynciowindows_events.py", linha 457, em finish_recv
aumentar ConnectionResetError(*exc.args)

Exceção [WinError 995] Der E/A-Vorgang wurde wegen eines Threadendes oder einer Anwendungsanforderung abgebrochen
Pressione ENTER para continuar...

Infelizmente

conda install -c conda-forge prompt_toolkit

não resolveu o problema para mim.

@musm , você precisa especificar prompt_toolkit v2.

conda install -c conda-forge prompt_toolkit=2

Estou no Anaconda 2020.11 fazendo

conda install -c conda-forge prompt_toolkit=2

Está levando a grandes conflitos:

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

Oi @musm , essa é uma das desvantagens de usar a distribuição completa do Anaconda. Existem tantos módulos que pode ser difícil resolver todas as suas dependências simultaneamente se você se desviar da distribuição fornecida. Você pode tentar o Miniconda, que é o Conda, mas sem os módulos pré-instalados. Com ele, você cria ambientes para incluir apenas os módulos necessários para o seu projeto.

Eu não tentei isso, mas é possível que você também consiga fazer isso sem precisar desinstalar o Anaconda e instalar o Miniconda. IE Crie um novo ambiente do zero que inclua apenas módulos específicos. Experimente com um comando como o seguinte (edite os nomes dos módulos para incluir o que você realmente precisa).

conda create -n <myenv> python ipython prompt_toolkit=2 jupyter pandas numpy scipy scikit-learn matplotlib
Esta página foi útil?
0 / 5 - 0 avaliações