Fabric için NotebookUtils oturum yönetimi

Microsoft Fabric'te not defteri oturumlarının yaşam döngüsünü yönetmek için kullanın notebookutils.session . Etkileşimli bir oturumu durdurabilir veya temizleme, kaynak yönetimi ve hata kurtarma için Python yorumlayıcısını yeniden başlatabilirsiniz.

Aşağıdaki tabloda kullanılabilir oturum yönetimi yöntemleri listelenmektedir:

Yöntem Signature Açıklama
stop stop(): void Geçerli etkileşimli oturumu asenkron olarak durdurur ve kaynakları serbest bırakır. PySpark, Scala ve R not defterlerinde isteğe bağlı detach bir parametre kabul eder.
restartPython restartPython(): void Spark bağlamını olduğu gibi tutarken Python yorumlayıcısını yeniden başlatır. Yalnızca Python ve PySpark not defterlerinde kullanılabilir.

Uyarı

stop() Yöntemi Python, PySpark, Scala ve R not defterlerinde kullanılabilir. PySpark, Scala ve R not defterlerinde, stop() isteğe bağlı bir detach parametre kabul eder: stop(detach=True). detach True (varsayılan) olduğunda, oturum tamamen durdurulmak yerine yüksek eşzamanlılık oturumundan ayrılır.

Uyarı

restartPython() yöntemi yalnızca Python ve PySpark not defterlerinde kullanılabilir. Scala veya R not defterlerinde kullanılamaz.

Önemli

İşlem hattı yürütme modunda, kod tamamlandıktan sonra oturumlar otomatik olarak durur. session.stop() API öncelikli olarak, durdur düğmesine tıklamak yerine program aracılığıyla oturumu durdurmak istediğiniz etkileşimli oturumlara yöneliktir.

Uyarı

stop() yöntemi arka planda zaman uyumsuz olarak çalışır ve Spark oturum kaynaklarını serbest bırakır ve böylece aynı havuzdaki diğer oturumların kullanımına sunulur.

Etkileşimli oturumu durdurma

Durdur düğmesini el ile seçmek yerine, kodunuzda bir API çağırarak etkileşimli oturumu durdurabilirsiniz.

notebookutils.session.stop()

notebookutils.session.stop() API, geçerli etkileşimli oturumu arka planda eş zamansız olarak durdurur. Ayrıca Spark oturumunu durdurur ve oturum tarafından kullanılan kaynakları serbest bırakır, böylece aynı havuzdaki diğer oturumlar için kullanılabilir.

Uyarı

Sonrasındaki session.stop() kod yürütülmüyor. Oturum durdurulduğunda tüm bellek içi veriler ve değişkenler kaybolur. çağrısına session.stop()başlamadan önce önemli verileri kaydedin.

Dönüş davranışı

stop() yöntemi bir değer döndürmez. Oturumun zaman uyumsuz bir şekilde kapatılmasını başlatır.

Python yorumlayıcısını yeniden başlatma

Python yorumlayıcısını yeniden başlatmak için kullanın notebookutils.session.restartPython() .

Uyarı

PySpark (Spark) not defterlerinde, restartPython() Spark bağlamını olduğu gibi tutarken yalnızca Python yorumlayıcısını yeniden başlatır. Spark bağlamı olmayan Python not defterlerinde Python restartPython() işleminin tamamını yeniden başlatır.

notebookutils.session.restartPython()

Dönüş davranışı

restartPython() yöntemi bir değer döndürmez. Yeniden başlatma tamamlandıktan sonra kod yürütme sonraki hücrede devam eder.

Şu noktaları göz önünde bulundurun:

  • Not defteri başvuru çalıştırma durumunda, restartPython() yalnızca başvuruda bulunulan mevcut not defterinin Python yorumlayıcısını yeniden başlatır. Ana not defterini etkilemez.
  • Nadir durumlarda, Spark yansıma mekanizması nedeniyle komut başarısız olabilir. Yeniden deneme eklemek sorunu hafifletebilir.
  • çağrıldıktan restartPython()sonra kod yürütme sonraki hücrede devam eder. Yeni yüklenen paketleri sonraki bir hücreye aktar.

Kullanım desenleri

Durdurmadan önce düzgün temizleme

Temizlemenin oturum durdurulmadan önce çalıştırıldığından emin olmak için bir try-finally bloğu kullanın.

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

Paketleri yükleme ve yorumlayıcıyı yeniden başlatma

ile pipyeni paketler yükledikten sonra, paketlerin kullanılabilir olması için Python yorumlayıcısını yeniden başlatın:

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

Uyarı

çağrıldıktan restartPython()sonra kod yürütme sonraki hücrede devam eder. Yeni yüklenen paketleri sonraki bir hücreye aktarın.

Yorumlayıcı yeniden başlatma ile hata kurtarma

Python yorumlayıcısı bozuk bir duruma ulaşırsa, yeniden başlatarak kurtarmayı denemeniz gerekir:

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

Durdurmadan önce kaynak temizleme

Oturumu sonlandırmadan önce bağlı yolları, geçici dosyaları ve önbellekleri temizleyin:

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

Yalnızca etkileşimli mod için koşullu durdurma

İşlem hattı modunda gereksiz çağrılardan kaçınmak için durdurmadan önce yürütme bağlamını denetleyin:

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

Tavsiye

Her zaman, session.stop() veya session.restartPython() öğesini çağırmadan önce önemli sonuçları—örneğin, DataFrame'leri depolama alanına yazmak veya çıktıyı günlüğe kaydetmek gibi—kaydedin. Her iki işlem de bellek içindeki tüm durumu siler.