Ipython: No se pueden interrumpir bucles infinitos en el portátil.

Creado en 13 ene. 2013  ·  29Comentarios  ·  Fuente: ipython/ipython

Recientemente di una introducción a la programación de Python en el Workshop on Genomics. Para el tutorial, usamos la interfaz del portátil y fue muy bien recibido (¡gracias!). Durante la discusión sobre los bucles, pedí a los estudiantes que convirtieran un ejemplo de bucle for en un bucle while. En el proceso, muchos de los estudiantes crearon bucles infinitos. Para algunos de esos estudiantes, Firefox colapsó. La solución fue matar el servidor del portátil y matar el navegador. Todos los estudiantes estaban usando máquinas virtuales basadas en Ubuntu y Firefox como navegador. Si fuera de ayuda, puedo obtener más detalles sobre los sistemas e investigar si puedo recrear este comportamiento en mi copia de la máquina virtual.

needs-info

Comentario más útil

Creo que uno de nosotros necesita encontrar un portátil simple que replique este problema, al menos en algún sistema.

while True:
    print "foo"

Esto hace que Firefox utilice el 100 % de la CPU y no responda de ninguna forma. Matar Firefox y el proceso de IPython es la única forma de recuperar el sistema.

Python 3.0.0
Firefox 42.0
Linux 3.13.0-24-genérico

Todos 29 comentarios

¿Por casualidad, el que se bloqueó produjo la salida y no el que no bloqueó el navegador?
(debe tener un kernel de eliminación en un menú)

Probablemente podríamos tener un tiempo de espera de activación de seguridad que mata al servidor si el kernel permanece ocupado demasiado tiempo o si la interfaz recibe demasiada información.

Creo que aquí hay dos problemas:

  • Interrumpir un bucle infinito es perfectamente posible. En el menú Kernel, haga clic en interrumpir.
  • Si su bucle imprime algo en cada paso, producirá una gran cantidad de resultados, lo que podría causar problemas al navegador. Véase también el número 1975.

@Carreau no hubo salida

@takluyver el menú del kernel no respondía. Esto sucedería con bucles que imprimían y bucles que no imprimían.

¿Puede dar un ejemplo de un bucle donde no funciona?

El 13 de enero de 2013 a las 16:11, Daniel McDonald [email protected] escribió:

@Carreau https://github.com/Carreau no hubo salida

@takluyver https://github.com/takluyver el menú del kernel no estaba
sensible. Esto sucedería con los bucles que se estaban imprimiendo y los bucles que
no estaban imprimiendo.


Responda a este correo electrónico directamente o véalo en Gi tHubhttps://github.com/ipython/ipython/issues/2781#issuecomment -12195606.

Un algoritmo de anagrama ingenuo/horrible cuando las palabras no son anagramas entre sí

from random import shuffle 
word1 = list("quietx")
word2 = list("quite")
while word1 != word2:
    shuffle(word1)

Acabo de probar y puedo interrumpirlo sin problemas en Firefox y Ubuntu. ¿Puedes replicarlo de forma fiable en tu sistema?

No puedo replicarlo en mi sistema. Rastrearé a los usuarios que tuvieron el problema y lo volveré a ejecutar en sus sistemas. Las sesiones del taller se reanudan mañana por la mañana, el taller es en Europa y hoy es un día libre, por lo que pasará un poco antes de que pueda volver a esto.

Ya no estoy en condiciones de probar esto y no pude hacer un seguimiento en el
taller. Dado que no puedo reproducir el problema, ni nadie más,
Vamos a atribuirlo a una casualidad.

Gracias de nuevo por la rápida respuesta y me disculpo por perder el tiempo en esto.

El domingo 13 de enero de 2013 a las 9:57 a. m., Thomas Kluyver [email protected] escribió:

Acabo de probar y puedo interrumpir ese sin problemas en Firefox
y Ubuntu. ¿Puedes replicarlo de forma fiable en tu sistema?


Responda a este correo electrónico directamente o véalo en Gi tHubhttps://github.com/ipython/ipython/issues/2781#issuecomment -12196271.

No hay problema. Siéntase libre de volver a abrir si encuentra una manera de reproducir el error.

Obtengo esto todo el tiempo en el cuaderno IPython en Chrome (y acabo de probarlo en Firefox, y "tuvo éxito", es decir, se bloqueó). Creo que sucede cada vez que tengo un bucle infinito que se imprime con frecuencia. Es un problema para mí, porque a menudo ingreso instrucciones de impresión para depurar, y en esto, pierdo el código que se suponía que solucionaría mi error debido a un bloqueo.

Aquí está el código que usé para hacer que se bloquee:

importar numpy como np
x = np.matriz([0,1,2,3,4])
it = np.nditer(x,flags=['f_index'])
mientras no termine:
imprimirlo.index

A mi tambien me pasa esto...
Primero, el navegador deja de responder y luego encuentro que todo el sistema se bloquea. Me veo obligado a hacer un reinicio completo.
Uso Ubuntu con escritorio xfce / firefox.
Si fuera útil, estaría dispuesto a compartir cualquier otro detalle que pueda necesitar para solucionar este problema...
@minrk

¡Este problema parece seguir ahí!

Puedo ejecutar la "interrupción" o "Reiniciar" desde el menú del núcleo, pero no tuvo ningún efecto. el ícono de correr todavía se muestra como una bola negra.

Incluso si reinicio la computadora, después de hacer clic en la computadora portátil nuevamente, ¡se repetirá allí para siempre!

Estoy usando MacBook con ipython 2.2.0 instalado.

También he tenido este problema: el cuaderno ipython se cuelga en el navegador y no puedo recuperarlo usando el kernel de interrupción. Además de los errores de bucle, esto parece ocurrir con cualquier proceso de bloqueo, por ejemplo, si una consulta de Internet dentro de una función se bloquea por motivos de red.

Mi pregunta es, ¿hay alguna forma de acceder al núcleo subyacente desde la línea de comandos? Lanzo ipython notebook desde una terminal, y en este momento mi solución es interrumpir con el teclado esa terminal, lo que apaga el kernel por completo.

También tengo este problema crítico . Parece estar relacionado con los bucles de hecho. Esto me impide ejecutar largas simulaciones o análisis de datos, lo que significa: Estoy jodido...

No sé si está relacionado, pero noté que una vez que se bloquea, el hiperprocesamiento parece colapsar en una CPU que aún funciona. Puede ver eso usando htop , por ejemplo. Al principio, me pareció que el hyperthreading (que las bibliotecas numpy -> BLAS están explotando en mi máquina) era el que fallaba y luego todo funcionaba muy lento, pero luego traté de interrumpir y no tuve suerte, así que me di cuenta de que era el kernel de IPython que se estaba atascando.

Este problema nunca me ocurrió cuando:

  • Estaba usando una máquina más antigua (pero aún muy similar, solo menos RAM y CPU)
  • Estaba usando ipython antiguo <3.0
  • No estaba trabajando en un portátil IPython remoto

Mis conjeturas educadas son:

  • problema con el enchufe en alguna parte...
  • Los backends de subprocesamiento de matplotlib están estropeando <-- pero eso es solo porque casi siempre lo hacen, así que es mejor que apuestes;)

Cuando ocurre el problema, simplemente reinicio el kernel desde la interfaz web y vuelvo a hacer lo que estaba haciendo...

EDITAR: también me cuesta reproducirlo, pero noté que si no uso BLAS, por ejemplo, si no uso el producto de puntos de numpy, el problema no aparece, aunque debería ejecutar algunas pruebas más para verificar eso.

También veo este problema con bastante frecuencia y es difícil de resolver: si hay una gran cantidad de datos que requieren mucho tiempo para procesarse en el kernel, puede ser bastante molesto eliminar todo y forzar un reinicio. Definitivamente no es un error imaginario :)

También tengo este problema en OSX + Chrome.

@minrk , creo que puede valer la pena reabrir esto. No tengo suficientes privilegios para reabrir antes de crear un nuevo problema.

Desde la CLI, parece que presionar el botón de detener está haciendo algo, pero la computadora portátil sigue sin responder.

[I 15:26:22.224 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:26:32.197 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:26:42.688 NotebookApp] Saving file at /Untitled.ipynb
[I 15:27:30.993 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:27:35.605 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee
[I 15:28:43.999 NotebookApp] Saving file at /Untitled.ipynb
[I 15:29:28.038 NotebookApp] Kernel interrupted: edee0497-b340-43fd-be77-1ad67e5170ee

Creo que uno de nosotros necesita encontrar un portátil simple que replique este problema, al menos en algún sistema. De lo contrario, probablemente no será reparable.

Yo también estoy viendo este problema.

Creo que uno de nosotros necesita encontrar un portátil simple que replique este problema, al menos en algún sistema.

while True:
    print "foo"

Esto hace que Firefox utilice el 100 % de la CPU y no responda de ninguna forma. Matar Firefox y el proceso de IPython es la única forma de recuperar el sistema.

Python 3.0.0
Firefox 42.0
Linux 3.13.0-24-genérico

Puedo reproducirme con
ipython 3.2.0
pitón 2.7.10
Chrome versión 46.0.2490.86 (64 bits)
OS X 10.10.5

Una gran molestia para mí también. A menudo tengo que eliminar todo el servidor del portátil junto con Chrome debido a este problema. Puedo llegar al punto en el que hago clic en el botón de interrupción del núcleo y se resalta como si se hubiera hecho clic, pero algo, en algún lugar, no recibe el mensaje de detenerse.

Mi impresión inicial es que es un problema con el motor de representación de texto de Chrome, pero sé poco sobre cómo funciona.

Otro ejemplo de lentitud es cuando un matplotlib relativamente grande aparece en primer plano después de desplazarse hasta él. Todo el portátil se vuelve extremadamente nervioso durante unos buenos 4-5 segundos.

Por lo que vale, estoy usando una máquina bastante robusta, por lo que es especialmente extraño que jupyter pueda poner de rodillas a toda mi máquina.

9/10, sucede por accidente, por lo que no es tan fácil como llamarlo un error de error del usuario.

Acabo de tener este problema (o al menos se ajusta al perfil descrito anteriormente). No pude hacer que la ventana respondiera regularmente, pero _pude_ hacer una copia muy lenta del portapapeles de toda la página, lo que me permitió conservar mis cambios de código recientes.

No es una solución al problema, sino una forma potencial de mitigar sus consecuencias.

He tenido el mismo problema hoy y en el pasado, ejecutando Linux Mint (18.0) y Firefox. Era un generador de conteo () muy simple, pero estaba jugando con __getitem__ y, de una manera tonta, establecí una impresión en la clave.

Las últimas versiones de nuestros paquetes implementan la limitación de salida, lo que debería mitigar los problemas con grandes cantidades de salida que ralentizan el navegador.

El cierre ya que este problema no está en IPython en sí mismo y, si sigue siendo problemático y relevante, debe abrirse en el repositorio correcto. Esto permitirá mantener bajo control el número de incidencias abiertas en el repositorio de IPython.

Siéntase libre de seguir comentando o reabrir si es necesario.

Gracias.

@Carreau , ¿tiene un repositorio sugerido (o esto simplemente no se transfirió a donde se rastrean los problemas del cuaderno...)?

Eso deberá migrarse a jupyter/notebook o jupyterlab/jupyterlab. Probablemente el segundo si también afecta a jupyterlab.

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