Ipython: "Ejecutar todo" en el cuaderno se bloquea en% matplotlib qt

Creado en 16 abr. 2014  ·  39Comentarios  ·  Fuente: ipython/ipython

Este es un error extraño, pero parece reproducible en todos los sistemas.

Si tengo un cuaderno donde está la primera celda

%matplotlib qt

Y selecciono "Ejecutar todo", IPython ejecuta la primera celda pero luego se cuelga. El icono de estado en la esquina superior derecha es un círculo abierto, pero no puedo ejecutar ninguna otra celda. Si agrego una declaración de impresión simple después de la línea %matplotlib , se ejecuta y se imprime en la zona de salida.

Esto no sucede si ejecuto la celda "manualmente". Una vez que eso ha sucedido, puedo seleccionar "Ejecutar todo" sin problemas.

Esto sucede con IPyhton 2.0 en OSX 10.6 y 10.8. Estoy usando Python 2.7, a través de anaconda.

Feliz de intentar cualquier cosa para rastrear esto aún más ...

bug matplotlib

Comentario más útil

El problema también ocurre con la magia %gui qt , aunque creo que intenta importar matplotlib en algunas circunstancias, así que no estoy seguro.

Todos 39 comentarios

Noto algo similar con una instalación de Python 2.7 de miniconda en Windows. Cuando tengo un cuaderno donde está la primera celda:

%pylab

"Ejecutar todo" siempre se bloqueará incluso después de haber ejecutado manualmente esa celda en particular por sí sola. Después de esto, tengo que Kernel-> Reiniciar para que el portátil responda a cualquier cosa. Mi solución es ejecutar esa celda manualmente, pasar a la siguiente celda y luego "Ejecutar todo a continuación".

También me complace brindar más información para ayudar a rastrear esto aún más.

También puedo confirmar esto (y es bastante molesto si tiene una primera celda con %matplotlib y algunas importaciones (que tardan un poco en ejecutarse), y desea ejecutarla junto con las siguientes celdas).

Una forma sencilla de reproducir esto:

  1. Un cuaderno con dos celdas:

%matplotlib import time time.sleep(10)

print "This will not print"

  1. Ejecute ambos a la vez (presione shift-enter dos veces)
  2. La primera celda se ejecutará, pero luego el kernel se cuelga (la segunda celda no se ejecuta, no puede ejecutar nada, aunque el indicador dice que el kernel está listo).

untitled

Por lo tanto, no está necesariamente relacionado con "Ejecutar todo", sino solo con la ejecución de varias celdas donde una celda tiene %matplotlib .

Lo probé por última vez con IPython 2.1, Windows 64 bit, Firefox 31

Después de experimentar un poco más, descubrí que este problema se me aparece por primera vez en la versión 2.0.0. Si vuelvo a la versión 1.2.1 con

conda install ipython=1.2.1

el problema desaparece.

Windows de 32 bits, python 2.7.7, Firefox 31

También encontré este error y puedo reproducirlo usando el método anterior usando Python 3.4.1, Anaconda 2.1.0 (64 bits) en Windows 8, IPython 2.3.1
Es un error bastante molesto. ¿Hay algo que pueda hacer para ayudar a localizarlo? ¿Cuándo se espera que se complete el hito 4.0 (aproximadamente)?

Confirmo el error usando la versión reciente de ipython de github (e2778c5f4047d03f5f025bd53d1704a0cf9f0337) en Linux Mint 17, python 3.4 y matplotlib 1.4.0.

¿Alguna noticia sobre estos chicos? Puedo hacer más pruebas si es necesario. ¡Este error es realmente molesto!

Puedo confirmar que esto también me sucede a mí, sucede todo el tiempo en CentOS con python 2.7 y matplotlib 1.4.4

¿Funciona si ejecuta la celda manualmente?

Vea mi comentario anterior (https://github.com/ipython/ipython/issues/5629#issuecomment-50603511), también aparece si ejecuta varias celdas manualmente

Sí, creo que es básicamente una cuestión de tiempo. Si presionas Shift + Enter, ejecuta la celda, luego espera un segundo, luego continúa con los demás, entonces funciona. Si presiona Mayús + Intro varias veces repetidamente, se bloquea. La ejecución de más celdas no hace que se ejecute ningún código (también conocido como el pequeño círculo en la parte superior derecha todavía está vacío).

^ Eso es también lo que observé.

Verificado en Ipython Notebook 3.1.0. Solución alterna:

import time
%matplotlib
time.sleep(1)

Feo, pero es demasiado molesto renunciar a la opción de ejecutar todo.

También hice que esto funcionara en mi máquina.

El viernes 12 de junio de 2015 a las 7:02 a.m., quicknir [email protected] escribió:

Verificado en Ipython Notebook 3.1.0. Solución alterna:

tiempo de importación
% matplotlib
hora de dormir (1)

Feo, pero es demasiado molesto renunciar a la opción de ejecutar todo.

-
Responda a este correo electrónico directamente o véalo en GitHub
https://github.com/ipython/ipython/issues/5629#issuecomment -111502934.

¿Podríamos conseguir este hito para 4.1 (o 5.0)?
Colgar cuadernos suena (para mí) un poco más severo de lo apropiado para un hito de la lista de deseos. Además, este error es molesto cuando se usa matplotlib (a pesar de la solución).

¿Deberíamos tener un sleep(1) en la magia matplotlib como solución alternativa hasta que averigüemos por qué?

: +1:

La solución del sueño rara vez funciona para mí. Lo he visto funcionar un par de veces, pero la gran mayoría de las veces que lo he probado, el portátil todavía se cuelga.

La única solución que me funciona consistentemente es:

  1. Ejecute manualmente la celda que contiene% matplotlib
  2. Espere la indicación de inactividad del kernel
  3. seleccione la siguiente celda
  4. "Ejecutar todo a continuación"

FWIW Traté de probar esto un poco para obtener una estimación más razonable de qué tan bien funciona.

Hice un cuaderno con las siguientes tres celdas:

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

luego en el caparazón corrió:

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

Tal vez esta prueba no esté aplicando el código correcto, pero parece funcionar bien.

Marcado como 4.1 por lo que lo miramos.

Gracias.
Probé la reproducción de
También descubrí, como @tanderl , que la solución del sueño no me funciona de manera constante. Esto está en ipython 3.2.1 en Ubuntu de 64 bits. Puedo probar lo mismo en Windows mañana.

En Windows 8.1, usando Ipython 3.2.0 instalado a través de Anaconda, también descubrí que la solución de suspensión no funciona para mí, es decir, con sleep(1) (o valores incluso mayores) en la misma celda que matplotlib magic, Ejecutar Todo en un kernel recién reiniciado aún se bloqueará (o no hará nada, la interfaz de usuario aún funciona), con una estrella en la siguiente celda. Ejecutar las celdas manualmente una por una, con espera en el medio, todavía funciona.

Confirmo lo que dijo @bilderbuchi con una pila anaconda actualizada en Linux Mint.

Hola,
Acabo de experimentar un problema similar. Al ejecutar cuadernos que usan% matplotlib en línea o magia de cuadernos, el "ejecutar todas las celdas" a veces se cuelga y tengo que ejecutar todas las celdas a mano.
Estoy ejecutando Windows 7, Python 3.5, IPython 5.1.0, notebook 4.1.0 y matplotlib 1.5.3.
Como solución, limpio todas las salidas y luego parece funcionar. No puedo proporcionar un cuaderno reproducible, desafortunadamente (lo haré si me encuentro con esto en el futuro).

Atentamente,
Florian

Esto sigue siendo un problema, tanto en el laboratorio como en el portátil jupyter.

@thomasaarholt ¿tienes un procedimiento de reproducción confiable?

@bilderbuchi vea la publicación original en este número, sigue siendo el mismo problema. Aquí hay un GIF de mí recreando esto en mi máquina (OSX con el último jupyter y qt4)

bug

@Carreau , ¿esa reproducción es suficiente para trabajar? ¿Debería ser más urgente un error colgante que una "lista de deseos"?

@bilderbuchi @Carreau , acabo de ver la etiqueta de la lista de deseos.
Me gustaría argumentar que este error debería tener una prioridad mucho, mucho mayor:

Muchos usuarios nuevos de jupyter aprenderán a usar jupyter con portátiles preexistentes. Por ejemplo, intentan ejecutar un libro de trabajo de ejemplo proporcionado por algún complemento. Con el comportamiento actual, los usuarios que utilicen el comando Ejecutar todo, o "Shift + Enter" que recorran rápidamente el portátil encontrarán que el portátil se cuelga desde el primer momento y esto da una muy mala primera impresión. Esta impresión a menudo puede realmente enfatizar cuán "complicada es la codificación" para alguien que está aprendiendo codificación por primera vez, o alguien que ha tenido una mala experiencia (clase / examen) en el pasado.

Me gustaría argumentar que este error debería tener una prioridad mucho, mucho mayor:

Bueno, ya no es una cuestión de prioridad, el error ha estado abierto durante más de 2 años y el problema es que nadie puede resolverlo. Intentamos resolver eso, pero parece ser una solución difícil de alcanzar, y no podemos ser expertos en todas las bibliotecas y bucles de eventos de framework. Estaríamos encantados de hacer algo, pero el problema ha estado persistiendo durante tanto tiempo que etiquetarlo con una prioridad más alta no ayudará. Ninguno de los desarrolladores sabe lo que está pasando. De lo contrario, lo habríamos arreglado.

@Carreau ¿Puede señalarme en qué parte del código ipython debería estar ocurriendo la integración entre el servidor del kernel y la GUI?

¿Hay alguna forma de abrir mediante programación un cuaderno en un navegador y ejecutar todas las celdas? Eso probablemente nos permitiría dividir el código en dos para determinar qué cambio causa esto.
Intenté ejecutar el cuaderno infractor a través de nbconvert --execute desde el terminal y desde una sesión de IPython, pero no pude lograr que se cuelgue hasta ahora.

@bilderbuchi En primer lugar, ¿puede reproducir el error "a mano" en su máquina?

Si. Encontré un comportamiento interesante al probar diferentes variaciones de la magia.
Contenido de la primera celda:

%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

(El error diferente al hacer %matplotlib qt es ContinuumIO / anaconda-issues # 1068, creo).
La segunda celda solo tiene

print("This will not print")

Si dije "cuelga" arriba, quiero decir que la segunda celda siempre tiene una estrella en el número en lugar de "2", y el mensaje nunca se imprime.
Todo esto se ejecutó con Kernel - Restart & Run All para asegurar una pizarra limpia. Esto está en Python 3.6.1 a través de Anaconda en Windows 10, IPython 5.3.0, Firefox 52.0.2.

¿Puede señalarme en qué parte del código ipython debería estar ocurriendo la integración entre el servidor del kernel y la GUI?

Hay una descripción de cómo debe funcionar la integración de bucle de eventos aquí: http://ipython.readthedocs.io/en/stable/config/eventloops.html#event -loops-in-the-kernel

Y el código para el bucle de eventos Qt 5 comienza aquí: https://github.com/ipython/ipykernel/blob/20426cdad71820642dc69b95c30565d155521509/ipykernel/eventloops.py#L89

Para comprobarlo, ¿el problema es definitivamente con la parte "matplotlib" de %matplotlib y no con la magia en general? Solo en caso de que las otras magias tarden menos en ejecutarse, por lo que el error es menos notorio.

El problema también ocurre con la magia %gui qt , aunque creo que intenta importar matplotlib en algunas circunstancias, así que no estoy seguro.

Esto no tiene nada que ver (directamente) con matplotlib o magias. Es casi seguro que es una condición de carrera cuando se realiza la transferencia de un bucle de evento que ejecuta el espectáculo al otro.

Supongo que lo que se necesita aquí es una solución similar a https://github.com/ipython/ipython/pull/10301/files .

Me he enfrentado a un problema similar después de actualizar Spyder

Puedo confirmar que esto todavía está sucediendo con% gui qt. Tengo un montón de cosas Qt que llamo desde cuadernos y en esos cuadernos tengo que ejecutar mi primera celda manualmente, esperar a que se complete y luego Ejecutar todo a continuación.

¿Fue útil esta página
0 / 5 - 0 calificaciones