Freigeben über


NotebookUtils Sitzungsverwaltung für Fabric

Verwenden Sie notebookutils.session, um den Lebenszyklus von Notizbuchsitzungen in Microsoft Fabric zu verwalten. Sie können eine interaktive Sitzung beenden oder den Python-Interpreter neu starten, um Bereinigung, Ressourcenverwaltung und Fehlerwiederherstellung zu beheben.

In der folgenden Tabelle sind die verfügbaren Sitzungsverwaltungsmethoden aufgeführt:

Methode Signature Beschreibung
stop stop(): void Beendet die aktuelle interaktive Sitzung asynchron und gibt Ressourcen frei. In PySpark-, Scala- und R-Notizbüchern wird ein optionaler detach Parameter akzeptiert.
restartPython restartPython(): void Startet den Python-Interpreter neu, während der Spark-Kontext intakt bleibt. Nur in Python- und PySpark-Notizbüchern verfügbar.

Hinweis

Die stop() Methode ist in Python-, PySpark-, Scala- und R-Notizbüchern verfügbar. In PySpark-, Scala- und R-Notizbüchern stop() akzeptiert ein optionaler detach Parameter: stop(detach=True). Wenn detach auf True (Standardeinstellung) gesetzt ist, wird die Sitzung von einer Sitzung mit hoher Parallelität getrennt, anstatt diese vollständig zu beenden.

Hinweis

Die restartPython() Methode ist nur in Python- und PySpark-Notizbüchern verfügbar. Sie ist in Scala- oder R-Notizbüchern nicht verfügbar.

Von Bedeutung

Im Pipelineausführungsmodus werden Sitzungen nach Abschluss des Codes automatisch beendet. Die session.stop() API ist in erster Linie für interaktive Sitzungen vorgesehen, in denen Sie die Sitzung programmgesteuert beenden möchten, anstatt auf die Schaltfläche "Beenden" zu klicken.

Hinweis

Die stop() Methode funktioniert asynchron im Hintergrund und gibt Spark-Sitzungsressourcen frei, sodass sie für andere Sitzungen im selben Pool verfügbar werden.

Beenden einer interaktiven Sitzung

Anstatt die Stoppschaltfläche manuell auszuwählen, können Sie eine interaktive Sitzung beenden, indem Sie eine API in Ihrem Code aufrufen.

notebookutils.session.stop()

Die notebookutils.session.stop() API beendet die aktuelle interaktive Sitzung asynchron im Hintergrund. Außerdem wird die Spark-Sitzung beendet und ressourcen freigegeben, die von der Sitzung belegt sind, sodass sie für andere Sitzungen im selben Pool verfügbar sind.

Hinweis

Code nach session.stop() wird nicht ausgeführt. Alle In-Memory-Daten und Variablen gehen verloren, nachdem die Sitzung beendet wurde. Speichern Sie wichtige Daten, bevor Sie anrufen session.stop().

Rückgabeverhalten

Die stop() Methode gibt keinen Wert zurück. Es initiiert ein asynchrones Herunterfahren der Sitzung.

Starten Sie den Python-Dolmetscher neu

Verwenden Sie notebookutils.session.restartPython(), um den Python-Interpreter neu zu starten.

Hinweis

In PySpark (Spark)-Notizbüchern startet nur der Python-Dolmetscher neu, restartPython() während der Spark-Kontext intakt bleibt. In Python-Notebooks, die keinen Spark-Kontext aufweisen, wird der gesamte Python-Prozess von restartPython() neu gestartet.

notebookutils.session.restartPython()

Rückgabeverhalten

Die restartPython() Methode gibt keinen Wert zurück. Nach Abschluss des Neustarts wird die Codeausführung in der nächsten Zelle fortgesetzt.

Berücksichtigen Sie dabei Folgendes:

  • Im Fall der Notizbuchreferenz restartPython() wird nur der Python-Interpreter des aktuellen Notizbuchs neu gestartet, auf das verwiesen wird. Es wirkt sich nicht auf das übergeordnete Notizbuch aus.
  • In seltenen Fällen kann der Befehl aufgrund des Spark-Spiegelungsmechanismus fehlschlagen. Das Hinzufügen eines Wiederholungsversuches kann das Problem mindern.
  • Nach dem Aufrufen restartPython()wird die Codeausführung in der nächsten Zelle fortgesetzt. Importieren sie neu installierte Pakete in einer nachfolgenden Zelle.

Verwendungsmuster

Ordnungsgemäße Bereinigung vor dem Beenden

Verwenden Sie einen try-finally Block, um sicherzustellen, dass die Bereinigung ausgeführt wird, bevor die Sitzung beendet wird:

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

Installieren von Paketen und Neustarten des Interpreters

Starten Sie nach der Installation neuer Pakete mit pipdem Python-Interpreter neu, damit die Pakete verfügbar sind:

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

Hinweis

Nach dem Aufrufen restartPython()wird die Codeausführung in der nächsten Zelle fortgesetzt. Importieren Sie die neu installierten Pakete in einer nachfolgenden Zelle.

Fehlerwiederherstellung beim Neustart des Dolmetschers

Wenn der Python-Dolmetscher einen beschädigten Zustand erreicht, können Sie die Wiederherstellung versuchen, indem Sie ihn neu starten:

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

Ressourcenbereinigung vor dem Beenden

Bereinigen Sie bereitgestellte Pfade, temporäre Dateien und Caches, bevor Sie die Sitzung beenden:

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

Nur bedingter Stopp für den interaktiven Modus

Überprüfen Sie den Ausführungskontext, bevor Sie aufhören, um unnötige Aufrufe im Pipelinemodus zu vermeiden:

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

Tipp

Speichern Sie immer wichtige Ergebnisse, wie das Speichern von DataFrames oder die Protokollausgabe, bevor Sie session.stop() oder session.restartPython() aufrufen. Beide Vorgänge verwerfen den gesamten In-Memory-Zustand.