NotebookUtils-sessionshantering för Fabric

Använd notebookutils.session för att hantera livscykeln för notebook-sessioner i Microsoft Fabric. Du kan stoppa en interaktiv session eller starta om Python-tolken för rensning, resurshantering och felåterställning.

I följande tabell visas de tillgängliga metoderna för sessionshantering:

Metod Signature Beskrivning
stop stop(): void Stoppar den aktuella interaktiva sessionen asynkront och släpper resurser. I Notebook-filer för PySpark, Scala och R accepteras en valfri detach parameter.
restartPython restartPython(): void Startar om Python-tolken samtidigt som Spark-kontexten hålls intakt. Endast tillgängligt i Python- och PySpark-notebooks.

Anmärkning

Metoden stop() är tillgänglig i Python-, PySpark-, Scala- och R-notebooks. I PySpark-, Scala- och R-notebooks accepterar stop() en valfri detach-parameter: stop(detach=True). När detach är True (standard) kopplas sessionen från en session med hög parallellitet istället för att helt och hållet stoppa sessionen.

Anmärkning

Metoden restartPython() är endast tillgänglig i Python- och PySpark-notebook-filer. Den är inte tillgänglig i Scala- eller R-anteckningsböcker.

Viktigt!

I pipelinekörningsläge stoppas sessioner automatiskt när koden har slutförts. API:et session.stop() är främst avsett för interaktiva sessioner där du vill stoppa sessionen programmatiskt i stället för att klicka på stoppknappen.

Anmärkning

Metoden stop() fungerar asynkront i bakgrunden och släpper Spark-sessionsresurser så att de blir tillgängliga för andra sessioner i samma pool.

Avbryt en interaktiv session

I stället för att manuellt välja stoppknappen kan du stoppa en interaktiv session genom att anropa ett API i koden.

notebookutils.session.stop()

API:et notebookutils.session.stop() stoppar den aktuella interaktiva sessionen asynkront i bakgrunden. Den stoppar även Spark-sessionen och frigör resurser som används av sessionen, så att de är tillgängliga för andra sessioner i samma pool.

Anmärkning

Koden efter session.stop() körs inte. Alla minnesinterna data och variabler går förlorade när sessionen stoppas. Spara viktiga data innan du anropar session.stop().

Returbeteende

Metoden stop() returnerar inte något värde. Den initierar en asynkron avstängning av sessionen.

Starta om Python-tolken

Använd notebookutils.session.restartPython() för att starta om Python-tolken.

Anmärkning

I PySpark (Spark) notebook-filer restartPython() startar om endast Python-tolken medan Spark context hålls intakt. I Python-notebook-filer, som inte har någon Spark-kontext, restartPython() startas hela Python-processen om.

notebookutils.session.restartPython()

Returbeteende

Metoden restartPython() returnerar inte något värde. När omstarten är klar fortsätter kodkörningen i nästa cell.

Tänk på följande:

  • Vid notebook-referenskörningsfallet restartPython() startar bara om Python-tolken för den aktuella notebook-fil som det refereras till. Det påverkar inte den överordnade notebook-filen.
  • I sällsynta fall kan kommandot misslyckas på grund av Spark-reflektionsmekanismen. Om du lägger till ett nytt försök kan du undvika problemet.
  • Efter att ha anropat restartPython() fortsätter kodkörningen i nästa cell. Importera nyligen installerade paket i en efterföljande cell.

Användningsmönster

Graciös rensning innan du stoppar

Använd ett try-finally block för att säkerställa att rensningen körs innan sessionen stoppas:

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

Installera paket och starta om tolken

När du har installerat nya paket med pipstartar du om Python-tolken så att paketen är tillgängliga:

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

Anmärkning

Efter att ha anropat restartPython() fortsätter kodkörningen i nästa cell. Importera de nyligen installerade paketen i en efterföljande cell.

Felåterställning vid omstart av tolk

Om Python-tolken når ett skadat tillstånd kan du försöka återställa genom att starta om den:

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

Resursrensning innan du stoppar

Rensa monterade sökvägar, temporära filer och cacheminnen innan sessionen avslutas:

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

Villkorsstyrd stopp endast för interaktivt läge

Kontrollera körningskontexten innan du stoppar för att undvika onödiga anrop i pipelineläge:

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

Tips/Råd

Spara alltid viktiga resultat , till exempel att skriva DataFrames till lagring eller logga utdata innan du anropar session.stop() eller session.restartPython(). Båda åtgärderna tar bort allt minnesinternt tillstånd.