NotebookUtils munkamenet-kezelés a Fabric számára

A jegyzetfüzet-munkamenetek életciklusának kezelésére használható notebookutils.session a Microsoft Fabricben. Leállíthat egy interaktív munkamenetet, vagy újraindíthatja a Python-értelmezőt a törléshez, az erőforrás-kezeléshez és a hibahelyreállításhoz.

Az alábbi táblázat az elérhető munkamenet-kezelési módszereket sorolja fel:

Módszer Signature Leírás
stop stop(): void Aszinkron módon leállítja az aktuális interaktív munkamenetet, és felszabadítja az erőforrásokat. PySpark-, Scala- és R-jegyzetfüzetekben egy választható detach paramétert fogad el.
restartPython restartPython(): void Újraindítja a Python-értelmezőt, miközben a Spark-környezet érintetlen marad. Csak Python- és PySpark-jegyzetfüzetekben érhető el.

Megjegyzés:

A stop() módszer Python-, PySpark-, Scala- és R-jegyzetfüzetekben érhető el. A PySparkban, a Scalában és az R-jegyzetfüzetekben stop() egy választható detach paramétert fogad el: stop(detach=True). Ha a detach értéke True (ami az alapértelmezett), akkor a munkamenet leválik egy magas egyidejűségű munkamenetről, ahelyett hogy teljesen leállítaná azt.

Megjegyzés:

A restartPython() metódus csak Python- és PySpark-jegyzetfüzetekben érhető el. Scala- vagy R-jegyzetfüzetekben nem érhető el.

Fontos

Folyamatvégrehajtási módban a munkamenetek a kód befejeződése után automatikusan leállnak. Az session.stop() API elsősorban interaktív munkamenetekhez készült, ahol a leállítás gombra kattintás helyett programozott módon szeretné leállítani a munkamenetet.

Megjegyzés:

A stop() metódus aszinkron módon működik a háttérben, és felszabadítja a Spark-munkamenet erőforrásait, hogy elérhetővé váljanak az ugyanabban a készletben lévő többi munkamenet számára.

Interaktív munkamenet leállítása

A leállítás gomb manuális kiválasztása helyett leállíthat egy interaktív munkamenetet egy API meghívásával a kódban.

notebookutils.session.stop()

Az notebookutils.session.stop() API a háttérben aszinkron módon állítja le az aktuális interaktív munkamenetet. Emellett leállítja a Spark-munkamenetet, és felszabadítja a munkamenet által foglalt erőforrásokat, így azok elérhetők az ugyanabban a készletben lévő többi munkamenet számára.

Megjegyzés:

A kód a session.stop() után nem fut. A munkamenet leállása után a memóriabeli adatok és változók elvesznek. Mentsd a fontos adatokat a hívás session.stop() előtt.

Visszatérési viselkedés

A stop() metódus nem ad vissza értéket. A munkamenet aszinkron leállítását kezdeményezi.

Indítsa újra a Python-értelmezőt

A Python-értelmező újraindítására használható notebookutils.session.restartPython() .

Megjegyzés:

A PySpark (Spark) jegyzetfüzetekben csak a Python-értelmezőt indítja újra restartPython(), miközben a Spark-környezet érintetlen marad. A Spark-környezettel restartPython() nem rendelkező Python-jegyzetfüzetekben újraindítja a teljes Python-folyamatot.

notebookutils.session.restartPython()

Visszatérési viselkedés

A restartPython() metódus nem ad vissza értéket. Az újraindítás befejezése után a kódvégrehajtás a következő cellában folytatódik.

Tartsa szem előtt az alábbi szempontokat:

  • A jegyzetfüzet-referenciafuttatási esetben restartPython() csak a hivatkozott jegyzetfüzet Python-értelmezőjét indítja újra. Nincs hatással a szülőjegyzetfüzetre.
  • Ritkán előfordulhat, hogy a parancs meghiúsul a Spark-tükröződési mechanizmus miatt. Az újrapróbálkozás hozzáadása enyhítheti a problémát.
  • A hívás restartPython()után a kódvégrehajtás a következő cellában folytatódik. Importálja az újonnan telepített csomagokat egy későbbi cellába.

Használati minták

Kecses tisztítás leállítás előtt

try-finally A blokk használatával győződjön meg arról, hogy a törlés a munkamenet leállása előtt fut:

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

Csomagok telepítése és az értelmező újraindítása

Az új csomagok piptelepítése után indítsa újra a Python-értelmezőt, hogy a csomagok elérhetők legyenek:

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

Megjegyzés:

A hívás restartPython()után a kódvégrehajtás a következő cellában folytatódik. Importálja az újonnan telepített csomagokat egy későbbi cellába.

Hiba helyreállítása az értelmező újraindításával

Ha a Python-értelmező sérült állapotba jut, a helyreállítást a következő újraindítással kísérelheti meg:

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

Erőforrás-tisztítás leállítás előtt

A munkamenet befejezése előtt törölje a csatlakoztatott elérési utakat, ideiglenes fájlokat és gyorsítótárakat:

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

Csak interaktív mód feltételes leállítása

A folyamat módban történő szükségtelen hívások elkerülése érdekében a leállítás előtt ellenőrizze a végrehajtási környezetet:

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

Jótanács

Mindig mentse a fontos eredményeket, például a DataFrame-eket a tárolóba vagy a naplózási kimenetet, mielőtt meghívná a session.stop() vagy session.restartPython() függvényeket. Mindkét művelet elveti az összes memóriabeli állapotot.