Manajemen sesi NotebookUtils untuk Fabric

Gunakan notebookutils.session untuk mengelola siklus hidup sesi notebook di Microsoft Fabric. Anda dapat menghentikan sesi interaktif atau memulai ulang penerjemah Python untuk pembersihan, manajemen sumber daya, dan pemulihan kesalahan.

Tabel berikut mencantumkan metode manajemen sesi yang tersedia:

Metode Signature Deskripsi
stop stop(): void Menghentikan sesi interaktif saat ini secara asinkron dan merilis sumber daya. Di notebook PySpark, Scala, dan R, menerima parameter opsional detach .
restartPython restartPython(): void Memulai ulang penerjemah Python sambil menjaga konteks Spark tetap utuh. Hanya tersedia di notebook Python dan PySpark.

Nota

Metode stop() ini tersedia di notebook Python, PySpark, Scala, dan R. Di notebook PySpark, Scala, dan R, stop() menerima parameter opsional detach : stop(detach=True). Ketika detach adalah True (default), sesi terlepas dari sesi konkurensi tinggi alih-alih menghentikannya sepenuhnya.

Nota

Metode restartPython() ini hanya tersedia di notebook Python dan PySpark. Ini tidak tersedia di notebook Scala atau R.

Penting

Dalam mode eksekusi alur, sesi secara otomatis berhenti setelah kode selesai. session.stop() API terutama ditujukan untuk sesi interaktif di mana Anda ingin menghentikan sesi secara terprogram alih-alih mengklik tombol berhenti.

Nota

Metode ini stop() beroperasi secara asinkron di latar belakang dan merilis sumber daya sesi Spark sehingga tersedia untuk sesi lain di kumpulan yang sama.

Menghentikan sesi interaktif

Alih-alih memilih tombol berhenti secara manual, Anda dapat menghentikan sesi interaktif dengan memanggil API dalam kode Anda.

notebookutils.session.stop()

notebookutils.session.stop() API menghentikan sesi interaktif saat ini secara asinkron di latar belakang. Ini juga menghentikan sesi Spark dan melepaskan sumber daya yang digunakan oleh sesi, sehingga dapat tersedia untuk sesi lain dalam kelompok yang sama.

Nota

Kode setelah session.stop() tidak dijalankan. Semua data dan variabel dalam memori hilang setelah sesi berhenti. Simpan data penting sebelum Anda memanggil session.stop().

Perilaku Pengembalian

Metode stop() ini tidak mengembalikan nilai. Ini memulai penutupan asinkron sesi.

Mulai ulang penerjemah Python

Gunakan notebookutils.session.restartPython() untuk menghidupkan ulang penerjemah Python.

Nota

Di notebook PySpark (Spark), restartPython() hidupkan ulang hanya penerjemah Python sambil menjaga konteks Spark tetap utuh. Di notebook Python, yang tidak memiliki konteks Spark, restartPython() memulai ulang seluruh proses Python.

notebookutils.session.restartPython()

Perilaku Pengembalian

Metode restartPython() ini tidak mengembalikan nilai. Setelah hidupkan ulang selesai, eksekusi kode berlanjut di sel berikutnya.

Ingatlah pertimbangan ini:

  • Dalam kasus eksekusi referensi buku catatan, restartPython() hanya memulai ulang penerjemah Python dari buku catatan saat ini yang sedang dirujuk. Ini tidak memengaruhi buku catatan induk.
  • Dalam kasus yang jarang terjadi, perintah mungkin gagal karena mekanisme refleksi Spark. Menambahkan coba lagi dapat mengurangi masalah.
  • Setelah memanggil restartPython(), eksekusi kode berlanjut di sel berikutnya. Impor paket yang baru diinstal dalam sel berikutnya.

Pola penggunaan

Pembersihan teratur sebelum berhenti

Gunakan blok try-finally untuk memastikan proses pembersihan berjalan sebelum sesi berhenti.

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

Menginstal paket dan menghidupkan ulang penerjemah

Setelah menginstal paket baru dengan pip, mulai ulang penerjemah Python sehingga paket tersedia:

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

Nota

Setelah memanggil restartPython(), eksekusi kode berlanjut di sel berikutnya. Impor paket yang baru diinstal dalam sel berikutnya.

Pemulihan kesalahan dengan memulai ulang penerjemah

Jika penerjemah Python mencapai status rusak, Anda dapat mencoba pemulihan dengan memulai ulang:

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

Pembersihan sumber daya sebelum berhenti

Bersihkan jalur yang dipasang, file sementara, dan cache sebelum mengakhiri sesi:

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

Penghentian bersyarat hanya untuk mode interaktif

Periksa konteks eksekusi sebelum berhenti untuk menghindari panggilan yang tidak perlu dalam mode alur:

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

Tip

Selalu simpan hasil penting—seperti menyimpan DataFrames ke penyimpanan atau mengelola output dengan benar sebelum memanggil session.stop() atau session.restartPython(). Kedua operasi ini menghapus semua status yang ada dalam memori.