Jaa


NotebookUtils session management for Fabric

Käytä notebookutils.session muistikirjan istuntojen elinkaaren hallintaan Microsoft Fabricissa. Voit keskeyttää interaktiivisen istunnon tai käynnistää Python-tulkin uudelleen siivousta, resurssien hallintaa ja virheiden korjausta varten.

Seuraava taulukko listaa käytettävissä olevat istunnonhallintamenetelmät:

Menetelmä Allekirjoitus Description
stop stop(): void Pysäyttää nykyisen interaktiivisen istunnon asynkronisesti ja vapauttaa resursseja. PySpark-, Scala- ja R-muistikirjoissa hyväksytään valinnainen detach parametri.
restartPython restartPython(): void Käynnistän Python-tulkin uudelleen säilyttäen Spark-kontekstin ennallaan. Saatavilla vain Python- ja PySpark-muistikirjoissa.

Muistio

Menetelmä stop() on saatavilla Python-, PySpark-, Scala- ja R-muistikirjoissa. PySpark-, Scala- ja R-muistikirjoissa stop() hyväksytään valinnainen detach parametri: stop(detach=True). Kun detach on True (oletus), istunto irtautuu korkean samanaikaisuuden istunnosta sen sijaan, että se pysäytelisi kokonaan.

Muistio

Menetelmä restartPython() on saatavilla vain Python- ja PySpark-muistikirjoissa. Sitä ei ole saatavilla Scala- tai R-muistikirjoissa.

Tärkeää

Putkiston suoritustilassa istunnot pysähtyvät automaattisesti koodin valmistuttua. API session.stop() on ensisijaisesti tarkoitettu interaktiivisiin sessioihin, joissa haluat pysäyttää istunnon ohjelmallisesti sen sijaan, että klikkaisit pysäytyspainiketta.

Muistio

Metodi stop() toimii taustalla asynkronisesti ja vapauttaa Spark-istuntoresursseja, jotta ne tulevat saataville myös muille saman poolin sessioille.

Vuorovaikutteisen istunnon lopettaminen

Sen sijaan, että valitsisit pysäytyspainikkeen manuaalisesti, voit pysäyttää interaktiivisen istunnon kutsumalla API:n koodissasi.

notebookutils.session.stop()

API notebookutils.session.stop() pysäyttää nykyisen interaktiivisen istunnon asynkronisesti taustalla. Se myös pysäyttää Spark-istunnon ja vapauttaa resursseja, jotka istunto vie, joten ne ovat käytettävissä myös muille sessioille samassa poolissa.

Muistio

Seuraava session.stop() koodi ei käynnisty. Kaikki muistissa olevat tiedot ja muuttujat katoavat istunnon päättyessä. Tallenna tärkeät tiedot ennen kuin soitat session.stop().

Palautuskäyttäytyminen

Menetelmä stop() ei anna arvoa. Se käynnistää istunnon asynkronisen pysäytyksen.

Käynnistä Python-tulkki uudelleen

Käytä notebookutils.session.restartPython() Python-tulkin uudelleenkäynnistykseen.

Muistio

PySpark (Spark) -muistikirjoissa restartPython() käynnistää uudelleen vain Python-tulkki säilyttäen Spark-kontekstin ennallaan. Python-muistikirjat, joissa ei ole Spark-kontekstia, restartPython() käynnistävät koko Python-prosessin uudelleen.

notebookutils.session.restartPython()

Palautuskäyttäytyminen

Menetelmä restartPython() ei anna arvoa. Uudelleenkäynnistyksen jälkeen koodin suoritus jatkuu seuraavassa solussa.

Pidä nämä seikat mielessä:

  • Muistikirjan viitesuorituksessa restartPython() käynnistää uudelleen vain nykyisen viitatun muistikirjan Python-tulkin. Se ei vaikuta vanhemman muistikirjaan.
  • Harvinaisissa tapauksissa komento voi epäonnistua Spark-heijastusmekanismin vuoksi. Uudelleenyrityksen lisääminen voi lieventää ongelmaa.
  • Kutsumisen restartPython()jälkeen koodin suoritus jatkuu seuraavassa solussa. Tuo uudet paketit seuraavaan soluun.

Käyttötavat

Sulava siivous ennen pysähtymistä

Käytä lohkoa try-finally varmistaaksesi, että siivous käynnistyy ennen istunnon loppumista:

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

Asenna paketit ja käynnistä tulkki uudelleen

Kun asennat uudet paketit , pipkäynnistä Python-tulkki uudelleen, jotta paketit ovat saatavilla:

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

Muistio

Kutsumisen restartPython()jälkeen koodin suoritus jatkuu seuraavassa solussa. Tuo uudet paketit seuraavaan soluun.

Virheenkorjaus tulkin uudelleenkäynnistyksellä

Jos Python-tulkki saavuttaa vioittuneen tilan, voit yrittää palautusta käynnistämällä sen uudelleen:

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

Resurssien siivous ennen lopettamista

Siivoa liitetyt polut, väliaikaiset tiedostot ja välimuistit ennen istunnon lopettamista:

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

Ehdollinen pysäytys vain interaktiiviselle tilalle

Tarkista suorituskonteksti ennen pysähtymistä, jotta välttää tarpeettomia kutsuja putkistotilassa:

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

Vinkki

Tallenna aina tärkeät tulokset—kuten DataFramejen kirjoittaminen tallennustilaan tai tulostuksen kirjaaminen—ennen kuin kutsut session.stop() tai session.restartPython(). Molemmat toiminnot hylkäävät kaiken muistitilan.