NotebookUtils-sessiebeheer voor Fabric

Gebruik notebookutils.session om de levenscyclus van notebooksessies in Microsoft Fabric te beheren. U kunt een interactieve sessie stoppen of de Python-interpreter opnieuw starten voor opschonen, resourcebeheer en foutherstel.

De volgende tabel bevat de beschikbare sessiebeheermethoden:

Methode Signature Beschrijving
stop stop(): void Stopt de huidige interactieve sessie asynchroon en publiceert resources. In PySpark, Scala en R notebooks wordt een optionele detach parameter geaccepteerd.
restartPython restartPython(): void Start de Python-interpreter opnieuw op terwijl de Spark-context intact blijft. Alleen beschikbaar in Python- en PySpark-notebooks.

Opmerking

De stop() methode is beschikbaar in Python-, PySpark-, Scala- en R-notebooks. In PySpark-, Scala- en R-notebooks accepteert stop() een optionele detach-parameter: stop(detach=True). Wanneer detach is True (de standaardinstelling), wordt de sessie losgekoppeld van een sessie met hoge gelijktijdigheid in plaats van dat deze volledig wordt gestopt.

Opmerking

De restartPython() methode is alleen beschikbaar in Python- en PySpark-notebooks. Deze is niet beschikbaar in Scala- of R-notebooks.

Belangrijk

In de uitvoeringsmodus voor pijplijn worden sessies automatisch gestopt nadat de code is voltooid. De session.stop() API is voornamelijk bedoeld voor interactieve sessies waar u de sessie programmatisch wilt stoppen in plaats van op de stopknop te klikken.

Opmerking

De stop() methode werkt asynchroon op de achtergrond en publiceert Spark-sessieresources, zodat ze beschikbaar worden voor andere sessies in dezelfde pool.

Een interactieve sessie stoppen

In plaats van handmatig de stopknop te selecteren, kunt u een interactieve sessie stoppen door een API aan te roepen in uw code.

notebookutils.session.stop()

De notebookutils.session.stop() API stopt de huidige interactieve sessie asynchroon op de achtergrond. Ook wordt de Spark-sessie gestopt en worden de resources die door de sessie worden bezet vrijgegeven, waardoor deze beschikbaar zijn voor andere sessies in dezelfde pool.

Opmerking

Code na session.stop() wordt niet uitgevoerd. Alle in-memory gegevens en variabelen gaan verloren nadat de sessie is gestopt. Sla belangrijke gegevens op voordat u belt session.stop().

Retourgedrag

De stop() methode retourneert geen waarde. De sessie wordt asynchroon afgesloten.

De Python-interpreter opnieuw starten

Gebruik notebookutils.session.restartPython() dit om de Python-interpreter opnieuw op te starten.

Opmerking

In de PySpark-notebooks restartPython() wordt alleen de Python-interpreter opnieuw opgestart terwijl de Spark-context intact blijft. In Python-notebooks, die geen Spark-context hebben, restartPython() wordt het hele Python-proces opnieuw gestart.

notebookutils.session.restartPython()

Retourgedrag

De restartPython() methode retourneert geen waarde. Nadat het opnieuw opstarten is voltooid, gaat de uitvoering van de code verder in de volgende cel.

Houd rekening met deze overwegingen:

  • In het geval van de notebookreferentie-uitvoering restartPython() wordt alleen de Python-interpreter opnieuw gestart van het notebook dat momenteel wordt gerefereerd. Dit heeft geen invloed op het oudernotitieblok.
  • In zeldzame gevallen kan de opdracht mislukken vanwege het Spark-reflectiemechanisme. Door een nieuwe poging toe te voegen, kan het probleem worden verholpen.
  • Na het aanroepen restartPython()wordt de code-uitvoering voortgezet in de volgende cel. Importeer zojuist geïnstalleerde pakketten in een volgende cel.

Gebruikspatronen

Ordelijk opschonen voordat je stopt

Gebruik een try-finally blok om ervoor te zorgen dat opschoning wordt uitgevoerd voordat de sessie stopt:

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

Pakketten installeren en de interpreter opnieuw starten

Nadat u nieuwe pakketten hebt geïnstalleerd, pipstart u de Python-interpreter opnieuw zodat de pakketten beschikbaar zijn:

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

Opmerking

Na het aanroepen restartPython()wordt de code-uitvoering voortgezet in de volgende cel. Importeer de zojuist geïnstalleerde pakketten in een volgende cel.

Foutherstel met het opnieuw opstarten van de interpreter

Als de Python-interpreter een beschadigde status bereikt, kunt u proberen te herstellen door deze opnieuw te 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")

Opschonen van bronnen voordat stoppen

Verwijder gekoppelde paden, tijdelijke bestanden en caches voordat u de sessie beëindigt:

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

Voorwaardelijke stop alleen voor interactieve modus

Controleer de uitvoeringscontext voordat u stopt om onnodige aanroepen in de pijplijnmodus te voorkomen:

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

Aanbeveling

Sla altijd belangrijke resultaten op, zoals het opslaan van DataFrames of logboekuitvoer, voordat u session.stop() of session.restartPython() aanroept. Beide bewerkingen verwijderen alle toestand in het geheugen.