¿Cómo interrumpir una evaluación de ipython fuera de control sin finalizar el proceso principal?

A veces sucede que una evaluación continua de ipython no responde a uno o incluso a varios Ctrl-C desde el teclado 1 .

¿Hay alguna otra manera de ipython proceso de ipython para abortar la evaluación actual y volver a su estado de “lectura”?

Tal vez con kill -SOMESECRETSIGNAL ? He probado algunos ( SIGINT , SIGTERM , SIGUSR1 , …) en vano: o no tienen ningún efecto (por ejemplo, SIGINT ), o matan el proceso ipython . ¿O tal vez alguna configuración ipython arcana? ¿Algún archivo centinela? …?

1 “Bastante pronto”, eso es. Por supuesto, es imposible especificar con precisión qué tan pronto es “lo suficientemente rápido”; depende de la situación, la confiabilidad de la duración del retraso, el temperamento del usuario, las elecciones del día en Hacker News, etc.

Depende de dónde esté ocurriendo la ejecución cuando decida interrumpir (en una función de python, en una biblioteca de nivel inferior, …). Si esto ocurre comúnmente dentro de una función que ha creado, puede intentar poner un bloque try / except en la función y capturar las excepciones de KeyboardInterrupt . Es posible que no salga de una biblioteca de bajo nivel (si es en realidad donde se está ejecutando), pero debería evitar que el intérprete de ipython se cierre.