Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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.
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.