Gestion des sessions NotebookUtils pour Fabric

Utilisez notebookutils.session pour gérer le cycle de vie des sessions de carnets dans Microsoft Fabric. Vous pouvez arrêter une session interactive ou redémarrer l’interpréteur Python pour le nettoyage, la gestion des ressources et la récupération d’erreurs.

Le tableau suivant répertorie les méthodes de gestion de session disponibles :

Méthode Signature Description
stop stop(): void Arrête la session interactive active de façon asynchrone et libère les ressources. Dans les notebooks PySpark, Scala et R, accepte le paramètre facultatif detach.
restartPython restartPython(): void Redémarre l’interpréteur Python tout en conservant le contexte Spark intact. Disponible uniquement dans les notebooks Python et PySpark.

Note

La stop() méthode est disponible dans les notebooks Python, PySpark, Scala et R. Dans les notebooks PySpark, Scala et R, stop() accepte un paramètre facultatif detach : stop(detach=True). Quand detach est True (la valeur par défaut), la session se détache d’une session à haute concurrence au lieu de l’arrêter entièrement.

Note

La restartPython() méthode est disponible uniquement dans les notebooks Python et PySpark. Il n’est pas disponible dans les notebooks Scala ou R.

Important

En mode d’exécution du pipeline, les sessions s’arrêtent automatiquement une fois le code terminé. L’API session.stop() est principalement destinée aux sessions interactives où vous souhaitez arrêter la session par programmation au lieu de cliquer sur le bouton Arrêter.

Note

La stop() méthode fonctionne de façon asynchrone en arrière-plan et libère les ressources de session Spark afin qu’elles deviennent disponibles pour d’autres sessions du même pool.

Arrêter une session interactive

Au lieu de sélectionner manuellement le bouton Arrêter, vous pouvez arrêter une session interactive en appelant une API dans votre code.

notebookutils.session.stop()

L’API notebookutils.session.stop() arrête la session interactive active de façon asynchrone en arrière-plan. Elle arrête également la session Spark et libère les ressources occupées par la session, de sorte qu’elles sont disponibles pour d’autres sessions dans le même pool.

Note

Le code après session.stop() ne s’exécute pas. Toutes les données et variables en mémoire sont perdues après l’arrêt de la session. Enregistrez les données importantes avant d’appeler session.stop().

Comportement de retour

La stop() méthode ne retourne pas de valeur. Il lance un arrêt asynchrone de la session.

Redémarrer l’interpréteur Python

Permet notebookutils.session.restartPython() de redémarrer l’interpréteur Python.

Note

Dans les notebooks PySpark (Spark), restartPython() redémarre uniquement l’interpréteur Python tout en conservant le contexte Spark intact. Dans les notebooks Python, qui n’ont pas de contexte Spark, restartPython() redémarre l’ensemble du processus Python.

notebookutils.session.restartPython()

Comportement de retour

La restartPython() méthode ne retourne pas de valeur. Une fois le redémarrage terminé, l’exécution du code se poursuit dans la cellule suivante.

Gardez à l’esprit les éléments suivants :

  • Lors de l'exécution de référence du notebook, restartPython() redémarre uniquement l'interpréteur Python du notebook actuellement en cours de référence. Cela n’affecte pas le bloc-notes parent.
  • Dans de rares cas, la commande peut échouer en raison du mécanisme de réflexion Spark. L’ajout d’une nouvelle tentative peut atténuer le problème.
  • Après l’appel restartPython(), l’exécution du code se poursuit dans la cellule suivante. Importez les packages nouvellement installés dans une cellule suivante.

Modèles d’utilisation

Nettoyage soigné avant d’arrêter

Utilisez un try-finally bloc pour vérifier que le nettoyage s’exécute avant l’arrêt de la session :

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()

Installer des packages et redémarrer l’interpréteur

Après avoir installé de nouveaux packages avec pip, redémarrez l’interpréteur Python afin que les packages soient 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()

Note

Après l’appel restartPython(), l’exécution du code se poursuit dans la cellule suivante. Importez les packages nouvellement installés dans une cellule suivante.

Récupération d’erreur avec redémarrage de l’interpréteur

Si l’interpréteur Python atteint un état endommagé, vous pouvez tenter de récupérer en le redémarrant :

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")

Nettoyage des ressources avant l’arrêt

Nettoyez les chemins montés, les fichiers temporaires et les caches avant de terminer la session :

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()

Arrêt conditionnel pour le mode interactif uniquement

Vérifiez le contexte d’exécution avant d’arrêter pour éviter les appels inutiles en mode pipeline :

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")

Conseil / Astuce

Enregistrez toujours des résultats importants, tels que l’écriture de DataFrames dans le stockage ou l'enregistrement de sorties, avant d’appeler session.stop() ou session.restartPython(). Les deux opérations suppriment tout l'état en mémoire.