es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo evitar que `jupyter run` se agote?

Comenzar un kernel de Python Jupyter con

> ipython kernel

y luego ejecutar un script en una terminal separada usando

> jupyter run script.py --existing

resulta en un error de tiempo de espera después de aproximadamente 10 segundos:

Traceback (most recent call last):
  File "/home/mason/.local/bin/jupyter-run", line 8, in <module>
    sys.exit(RunApp.launch_instance())
  File "/home/mason/.local/lib/python3.8/site-packages/jupyter_core/application.py", line 264, in launch_instance
    return super(JupyterApp, cls).launch_instance(argv=argv, **kwargs)
  File "/home/mason/.local/lib/python3.8/site-packages/traitlets/config/application.py", line 846, in launch_instance
    app.start()
  File "/home/mason/.local/lib/python3.8/site-packages/jupyter_client/runapp.py", line 107, in start
    reply = self.kernel_client.execute_interactive(code, timeout=OUTPUT_TIMEOUT)
  File "/home/mason/.local/lib/python3.8/site-packages/jupyter_client/utils.py", line 26, in wrapped
    raise e
  File "/home/mason/.local/lib/python3.8/site-packages/jupyter_client/utils.py", line 23, in wrapped
    return loop.run_until_complete(future)
  File "/home/mason/.local/lib/python3.8/site-packages/nest_asyncio.py", line 81, in run_until_complete
    return f.result()
  File "/usr/lib/python3.8/asyncio/futures.py", line 178, in result
    raise self._exception
  File "/usr/lib/python3.8/asyncio/tasks.py", line 280, in __step
    result = coro.send(None)
  File "/home/mason/.local/lib/python3.8/site-packages/jupyter_client/client.py", line 515, in _async_execute_interactive
    raise TimeoutError("Timeout waiting for output")
TimeoutError: Timeout esperando la salida

¿Cómo puedo evitar que esto ocurra? Intenté revisar el código de jupyter_client y cambiar varias opciones de configuración de IPyKernel, pero no he tenido suerte. (Lo que estoy intentando hacer, en última instancia, es usar Jupyter/IPyKernel para volver a ejecutar rápidamente scripts de Python que dependen de módulos de inicialización lenta como PyTorch).

Para referencia, el único paquete Pip que necesité instalar para obtener este comportamiento fue ipykernel, y el contenido de script.py es
“`python
from time import sleep

for _ in range(20):
print('Aún en ejecución')
sleep(1)
“`

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error de tiempo de espera se produce porque el comando jupyter run espera que el kernel produzca resultados en un tiempo determinado. Como tu script tarda 20 segundos en producir cualquier resultado, se alcanza el límite de tiempo de espera y se genera el error.

    Una forma de solucionar esto sería aumentar el tiempo de espera. Puedes hacerlo pasando la bandera --timeout al ejecutar jupyter run, de la siguiente manera:

    > jupyter run script.py --existing --timeout=30
    

    Esto aumentará el tiempo de espera a 30 segundos, que debería ser suficiente para que se ejecute tu script.

    Otra opción sería modificar tu script para que produzca resultados más rápidamente. Por ejemplo, podrías agregar una declaración print() al comienzo del script para producir algunos resultados de inmediato, de la siguiente manera:

    print("Iniciando el script...")
    from time import sleep
    
    for _ in range(20):
        print('Todavía en ejecución')
        sleep(1)
    

    Esto debería evitar que se produzca el error de tiempo de espera, ya que el script producirá resultados de inmediato.

    Por último, si buscas ejecutar scripts rápidamente, puedes considerar el uso de una herramienta como ipython en lugar de jupyter run. ipython es una herramienta de línea de comandos que proporciona un entorno más liviano para ejecutar código Python. Puedes iniciar una sesión de ipython y ejecutar tu script de la siguiente manera:

    > ipython
    In [1]: %run script.py
    

    Esto ejecutará tu script sin problemas de tiempo de espera, ya que ipython no tiene configuraciones de tiempo de espera por defecto.

Comments are closed.