Ipython: "Executar tudo" no bloco de notas trava em% matplotlib qt

Criado em 16 abr. 2014  ·  39Comentários  ·  Fonte: ipython/ipython

Este é um bug estranho, mas parece reproduzível em todos os sistemas.

Se eu tiver um caderno onde a primeira célula está

%matplotlib qt

E eu seleciono "Executar tudo", o IPython executa a primeira célula, mas trava. O ícone de status no canto superior direito é um círculo aberto, mas não consigo executar nenhuma outra célula. Se eu adicionar uma instrução de impressão simples após a linha %matplotlib , ela será executada e impressa na zona de saída.

Isso não acontece se eu executar a célula "manualmente". Assim que isso acontecer, posso selecionar "Executar tudo" sem problemas.

Isso acontece com o IPyhton 2.0 no OSX 10.6 e 10.8. Estou usando o Python 2.7, por meio do anaconda.

Fico feliz em tentar qualquer coisa para rastrear isso ...

bug matplotlib

Comentários muito úteis

O problema também acontece com a magia %gui qt , embora eu ache que tenta importar matplotlib em algumas circunstâncias, então não tenho certeza.

Todos 39 comentários

Percebo algo semelhante com a instalação do Python 2.7 do miniconda no Windows. Quando eu tenho um notebook onde a primeira célula é:

%pylab

"Executar tudo" sempre será interrompido, mesmo depois de executar manualmente aquela célula específica por conta própria. Depois disso, eu tenho que Kernel-> Reiniciar para que o notebook responda a qualquer coisa. Minha solução alternativa é executar essa célula manualmente sozinha, mover para a próxima célula e, em seguida, "Executar tudo abaixo".

Também estou feliz em fornecer mais informações para ajudar a rastrear isso mais adiante.

Eu também posso confirmar isso (e é bastante irritante se você tiver uma primeira célula com %matplotlib e algumas importações (que levam algum tempo para serem executadas), e você deseja executá-la junto com as células seguintes).

Uma maneira simples de reproduzir isso:

  1. Um notebook com duas células:

%matplotlib import time time.sleep(10)

print "This will not print"

  1. Execute ambos de uma vez (pressione shift-enter duas vezes)
  2. A primeira célula será executada, mas então o kernel trava (a segunda célula não é executada, você não pode executar nada, embora o indicador diga que o kernel está pronto).

untitled

Portanto, não está necessariamente relacionado a "Executar tudo", mas apenas à execução de várias células em que uma célula possui %matplotlib .

Testado pela última vez com IPython 2.1, Windows 64 bits, Firefox 31

Depois de um pouco mais de experimentação, descobri que esse problema apareceu pela primeira vez para mim na versão 2.0.0. Se eu reverter para a versão 1.2.1 com

conda install ipython=1.2.1

o problema vai embora.

Windows 32 bits, python 2.7.7, Firefox 31

Eu também encontrei esse bug e posso reproduzir usando o método acima usando Python 3.4.1, Anaconda 2.1.0 (64 bits) no Windows 8, IPython 2.3.1
É um bug muito chato. Posso fazer algo para ajudar a rastreá-lo? Quando o marco 4.0 (aproximadamente) deve ser concluído?

Confirmo o bug usando a versão recente do ipython do github (e2778c5f4047d03f5f025bd53d1704a0cf9f0337) no Linux Mint 17, python 3.4 e matplotlib 1.4.0.

Alguma notícia sobre esses caras? Posso fazer mais testes, se necessário. Esse bug é realmente irritante !!!

Posso confirmar que isso também acontece comigo, acontece o tempo todo no CentOS w / python 2.7 e matplotlib 1.4.4

Funciona se você executar o celular manualmente?

Veja meu comentário acima (https://github.com/ipython/ipython/issues/5629#issuecomment-50603511), ele também aparecerá se você executar várias células manualmente

Sim - é basicamente uma questão de tempo, eu acredito. Se você Shift + Enter executar a célula, esperar um segundo e continuar com as outras, então funciona. Se você pressionar Shift + Enter várias vezes repetidamente, ele trava. Executar outras células não faz com que nenhum código seja realmente executado (também conhecido como o pequeno círculo no canto superior direito ainda está vazio).

^ isso também é o que observei.

Verificado no Ipython Notebook 3.1.0. Gambiarra:

import time
%matplotlib
time.sleep(1)

Feio, mas é muito chato desistir da opção de executar tudo.

Eu fiz isso funcionar na minha máquina também.

Na sexta-feira, 12 de junho de 2015 às 7h02, quicknir [email protected] escreveu:

Verificado no Ipython Notebook 3.1.0. Gambiarra:

tempo de importação
% matplotlib
tempo.sono (1)

Feio, mas é muito chato desistir da opção de executar tudo.

-
Responda a este e-mail diretamente ou visualize-o no GitHub
https://github.com/ipython/ipython/issues/5629#issuecomment -111502934.

podemos obter este milestoned para 4.1 (ou 5.0)?
Cadernos pendurados soam (para mim) um pouco mais severo do que apropriado para um marco da lista de desejos. Além disso, esse bug é irritante ao usar matplotlib (apesar da solução alternativa).

Devemos apenas ter sleep(1) na própria magia matplotlib como uma solução alternativa até descobrirmos o porquê ??

: +1:

A solução alternativa para dormir raramente funciona para mim. Já o vi funcionar algumas vezes, mas na grande maioria das vezes que tentei, o notebook ainda trava.

A única solução alternativa que funciona de forma consistente para mim é:

  1. Execute manualmente a célula que contém% matplotlib
  2. Aguarde a indicação do kernel ocioso
  3. selecione a seguinte célula
  4. "Executar tudo abaixo"

FWIW, tentei testar um pouco para obter uma estimativa mais razoável de quão bem isso funciona.

Fiz um caderno com as três células a seguir:

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

em seguida, no shell correu:

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

Talvez este teste não esteja exercitando o código certo, mas parece funcionar bem.

Marcado como 4.1 para que possamos analisá-lo.

Obrigada.
Acabei de tentar a reprodução de @mwaskom e obtive os mesmos resultados. No entanto, eu retirei o código do tempo e do sono e executei a parte do shell novamente, e também _também_ funcionou! Portanto, este não parece ser um bom procedimento de reprodução (ou solução alternativa interna). : - /
Também descobri, como @tanderl , que a solução alternativa para o sono não funciona de forma consistente para mim. Isso está no ipython 3.2.1 no Ubuntu 64 bits. Posso tentar a mesma coisa no Windows amanhã.

No Windows 8.1, usando o Ipython 3.2.0 instalado via Anaconda, também descobri que a solução alternativa para dormir não funciona para mim, ou seja, com sleep(1) (ou valores ainda maiores) na mesma célula que a magia matplotlib, Executar Tudo em um kernel recém-reiniciado ainda travará (ou não fará nada, a IU ainda funciona), com uma estrela na célula seguinte. Executar as células manualmente, uma a uma, com espera entre elas, ainda funciona.

Eu confirmo o que @bilderbuchi disse com uma pilha anaconda atualizada no Linux Mint.

Oi,
Acabei de experimentar um problema semelhante. Ao executar notebooks que usam% matplotlib inline ou magics de notebook, o "executar todas as células" às vezes trava e eu tenho que executar todas as células manualmente.
Estou executando o Windows 7, Python 3.5, IPython 5.1.0, notebook 4.1.0 e matplotlib 1.5.3.
Como solução alternativa, eu limpo todas as saídas e parece que funciona. Não sou capaz de fornecer um bloco de notas reproduzível, infelizmente (fornecerei se eu topar com isso no futuro).

Atenciosamente,
Florian

Isso ainda está em questão, tanto no Jupyter Notebook quanto no Lab.

@thomasaarholt , você tem um procedimento de reprodução confiável?

@bilderbuchi veja a postagem original nesta edição, ainda é a mesma edição. Aqui está um GIF meu recriando isso na minha máquina (OSX com jupyter mais recente e qt4)

bug

@Carreau , é o

@bilderbuchi @Carreau , acabei de localizar a tag da lista de desejos.
Eu gostaria de argumentar que esse bug deve ter uma prioridade muito, muito mais alta:

Muitos novos usuários do jupyter aprenderão a usar o jupyter por meio de notebooks pré-existentes. Por exemplo, eles tentam executar um exemplo de pasta de trabalho fornecido por algum plug-in. Com o comportamento atual, os usuários que usam o comando Executar tudo ou "Shift + Enter" rapidamente pelo notebook perceberão que o notebook trava desde o primeiro momento, e isso dá uma primeira impressão muito ruim. Essa impressão muitas vezes pode realmente enfatizar o quão "a codificação é complicada" para alguém que está aprendendo codificação pela primeira vez ou para alguém que teve uma experiência ruim (aula / prova) no passado.

Eu gostaria de argumentar que esse bug deve ter uma prioridade muito, muito mais alta:

Bem, não é mais uma questão de prioridade, o bug está aberto há mais de 2 anos e o problema é que ninguém consegue descobrir. Nós tentamos descobrir isso, mas parece ser uma solução difícil e não podemos ser especialistas em todos os eventos e bibliotecas do framework. Ficaríamos felizes em fazer algo, mas o problema está persistindo há tanto tempo que marcá-lo com prioridade mais alta não ajudará. Nenhum dos desenvolvedores sabe o que está acontecendo. Caso contrário, o teríamos consertado.

@Carreau Você pode me apontar onde no código ipython a integração entre o servidor do kernel e a GUI deve estar acontecendo?

Existe uma maneira de abrir programaticamente um bloco de notas em um navegador e executar todas as células? Isso provavelmente nos permitiria dividir o código ao meio para descobrir qual alteração causa isso.
Tentei executar o notebook ofensivo por meio de nbconvert --execute no terminal e em uma sessão IPython, mas não consegui travá-lo até agora.

@bilderbuchi Para começar, você consegue reproduzir o bug "manualmente" em sua máquina?

sim. Eu encontrei um comportamento interessante tentando diferentes variações da magia
Conteúdo da primeira célula:

%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

(O bug diferente ao fazer %matplotlib qt é ContinuumIO / anaconda-issues # 1068, eu acho.)
A segunda célula tem apenas

print("This will not print")

Se eu disse "trava" acima, quero dizer que a segunda célula sempre tem uma estrela no número em vez de "2", e a mensagem nunca é impressa.
Tudo isso foi executado com Kernel - Reiniciar e Executar Tudo para garantir uma lousa limpa. Isso está no Python 3.6.1 via Anaconda no Windows 10, IPython 5.3.0, Firefox 52.0.2.

Você pode me apontar onde no código ipython a integração entre o servidor kernel e a GUI deve estar acontecendo?

Há uma descrição de como a integração do loop de evento deve funcionar aqui: http://ipython.readthedocs.io/en/stable/config/eventloops.html#event -loops-in-the-kernel

E o código para o loop de eventos Qt 5 começa aqui: https://github.com/ipython/ipykernel/blob/20426cdad71820642dc69b95c30565d155521509/ipykernel/eventloops.py#L89

Só para verificar - o problema é definitivamente com a parte "matplotlib" de %matplotlib e não com a magia em geral? Caso as outras magias demorem menos para serem executadas, o bug será menos perceptível.

O problema também acontece com a magia %gui qt , embora eu ache que tenta importar matplotlib em algumas circunstâncias, então não tenho certeza.

Isso não tem nada a ver (diretamente) com matplotlib ou magia. É quase certo que é uma condição de corrida ao fazer a transferência de um loop de evento para o outro.

Meu palpite é que uma correção semelhante para https://github.com/ipython/ipython/pull/10301/files é necessária aqui.

Eu enfrentei um problema semelhante após atualizar o Spyder

Posso confirmar que isso ainda está acontecendo com% gui qt. Eu tenho um monte de coisas de Qt que chamo de notebooks e nesses notebooks eu tenho que executar meu primeiro celular manualmente, esperar que ele seja concluído e, em seguida, Executar tudo abaixo.

Esta página foi útil?
0 / 5 - 0 avaliações