Administración de sesiones NotebookUtils para Fabric

Use notebookutils.session para administrar el ciclo de vida de las sesiones de cuadernos en Microsoft Fabric. Puede detener una sesión interactiva o reiniciar el intérprete de Python para la limpieza, la administración de recursos y la recuperación de errores.

En la tabla siguiente se enumeran los métodos de administración de sesiones disponibles:

Método Signature Descripción
stop stop(): void Detiene la sesión interactiva actual de forma asincrónica y libera los recursos. Los cuadernos de PySpark, Scala y R aceptan un parámetro opcional detach.
restartPython restartPython(): void Reinicia el intérprete de Python mientras mantiene intacto el contexto de Spark. Solo está disponible en cuadernos de Python y PySpark.

Nota:

El stop() método está disponible en cuadernos de Python, PySpark, Scala y R. En cuadernos de PySpark, Scala y R, stop() acepta un parámetro opcional detach : stop(detach=True). Cuando detach es True (valor predeterminado), la sesión se separa de una sesión de alta concurrencia en lugar de detenerla completamente.

Nota:

El restartPython() método solo está disponible en cuadernos de Python y PySpark. No está disponible en cuadernos de Scala o R.

Importante

En el modo de ejecución en canalización, las sesiones se detienen automáticamente tras completarse el código. La session.stop() API está pensada principalmente para sesiones interactivas en las que desea detener la sesión mediante programación en lugar de hacer clic en el botón detener.

Nota:

El stop() método funciona de forma asincrónica en segundo plano y libera los recursos de sesión de Spark para que estén disponibles para otras sesiones del mismo grupo.

Detener una sesión interactiva

En lugar de seleccionar manualmente el botón detener, puede detener una sesión interactiva llamando a una API en el código.

notebookutils.session.stop()

La notebookutils.session.stop() API detiene la sesión interactiva actual de forma asincrónica en segundo plano. También detiene la sesión de Spark y libera los recursos ocupados por la sesión, por lo que están disponibles para otras sesiones del mismo grupo.

Nota:

El código después de session.stop() no se ejecuta. Todos los datos y variables en memoria se pierden después de que se detenga la sesión. Guarde datos importantes antes de llamar a session.stop().

Comportamiento de retorno

El stop() método no devuelve un valor. Inicia un apagado asincrónico de la sesión.

Reinicio del intérprete de Python

Use notebookutils.session.restartPython() para reiniciar el intérprete de Python.

Nota:

En los cuadernos de PySpark (Spark), restartPython() reinicia solo el intérprete de Python mientras mantiene intacto el contexto de Spark. En los cuadernos de Python, que no tienen un contexto de Spark, restartPython() reinicia todo el proceso de Python.

notebookutils.session.restartPython()

Comportamiento de retorno

El restartPython() método no devuelve un valor. Una vez completado el reinicio, la ejecución del código continúa en la celda siguiente.

Tenga en cuenta las consideraciones siguientes:

  • En el caso de ejecución de referencia del cuaderno, restartPython() solo reinicia el intérprete de Python del cuaderno actual al que se hace referencia. No afecta al bloc de notas principal.
  • En raras ocasiones, es posible que se produzca un error en el comando debido al mecanismo de reflexión de Spark. Agregar un reintento puede mitigar el problema.
  • Después de llamar a restartPython(), la ejecución de código continúa en la celda siguiente. Importe los paquetes recién instalados en una celda posterior.

Patrones de uso

Limpieza correcta antes de detener

Use un try-finally bloque para asegurarse de que la limpieza se ejecuta antes de que se detenga la sesión:

try:
    print("Starting data processing...")
    # ... processing logic here ...

except Exception as e:
    print(f"Processing failed: {str(e)}")
    raise

finally:
    print("Performing cleanup...")
    try:
        notebookutils.fs.unmount("/mnt/data")
    except:
        pass

    notebookutils.session.stop()

Instalación de paquetes y reinicio del intérprete

Después de instalar nuevos paquetes con pip, reinicie el intérprete de Python para que los paquetes estén disponibles:

import subprocess
import sys

packages = ["pandas==2.0.0", "numpy==1.24.0"]

print("Installing packages...")
for package in packages:
    subprocess.check_call([sys.executable, "-m", "pip", "install", package])

print("Restarting Python interpreter...")
notebookutils.session.restartPython()

Nota:

Después de llamar a restartPython(), la ejecución de código continúa en la celda siguiente. Importe los paquetes recién instalados en una celda posterior.

Recuperación de errores con reinicio del intérprete

Si el intérprete de Python alcanza un estado dañado, puede intentar la recuperación reiniciando:

def recover_from_error():
    """Attempt to recover from errors by restarting Python."""

    try:
        test_value = 1 + 1
    except Exception as e:
        print(f"Python interpreter error: {str(e)}")
        print("Restarting Python interpreter...")
        notebookutils.session.restartPython()
        return False

    return True

if not recover_from_error():
    print("Recovery attempted - check next cell")

Limpieza de recursos antes de detenerse

Limpie las rutas de acceso montadas, los archivos temporales y las memorias caché antes de finalizar la sesión:

try:
    df = spark.range(0, 1000000)
    df.cache()
    result = df.count()
    print(f"Processing completed: {result}")

except Exception as e:
    print(f"Operation failed: {str(e)}")
    raise

finally:
    spark.catalog.clearCache()
    print("Stopping session to free resources...")
    notebookutils.session.stop()

Parada condicional solo para el modo interactivo

Compruebe el contexto de ejecución antes de detener para evitar llamadas innecesarias en modo de canalización:

context = notebookutils.runtime.context

if not context['isForPipeline']:
    print("Interactive mode: stopping session...")
    notebookutils.session.stop()
else:
    print("Pipeline mode: session stops automatically after execution")

Sugerencia

Guarde siempre resultados importantes( por ejemplo, escribir tramas de datos en el almacenamiento o la salida de registro) antes de llamar a session.stop() o session.restartPython(). Ambas operaciones eliminan todo el estado almacenado en memoria.