Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
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.
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.