Partilhar via


Gestão de sessões NotebookUtils para Fabric

Use notebookutils.session para gerir o ciclo de vida das sessões de notebook no Microsoft Fabric. Pode interromper uma sessão interativa ou reiniciar o interpretador Python para limpeza, gestão de recursos e recuperação de erros.

A tabela seguinte lista os métodos disponíveis de gestão de sessões:

Método Signature Descrição
stop stop(): void Termina a sessão interativa atual de forma assíncrona e liberta recursos. Nos cadernos PySpark, Scala e R, aceita um parâmetro opcional detach .
restartPython restartPython(): void Reinicia o interpretador Python mantendo o contexto do Spark intacto. Disponível apenas em cadernos Python e PySpark.

Observação

O stop() método está disponível em cadernos Python, PySpark, Scala e R. Nos cadernos PySpark, Scala e R, stop() aceita um parâmetro opcional detach : stop(detach=True). Quando detach é True (o padrão), a sessão desliga-se de uma sessão de alta concorrência em vez de a interromper completamente.

Observação

O restartPython() método está disponível apenas em cadernos Python e PySpark. Não está disponível em cadernos Scala ou R.

Importante

No modo de execução pipeline, as sessões param automaticamente após a conclusão do código. A session.stop() API destina-se principalmente a sessões interativas onde se pretende parar a sessão programaticamente em vez de clicar no botão de parar.

Observação

O stop() método opera de forma assíncrona em segundo plano e liberta os recursos das sessões Spark para que fiquem disponíveis para outras sessões no mesmo pool.

Parar uma sessão interativa

Em vez de selecionar manualmente o botão de parar, pode parar uma sessão interativa chamando uma API no seu código.

notebookutils.session.stop()

A notebookutils.session.stop() API interrompe a sessão interativa atual de forma assíncrona em segundo plano. Também interrompe a sessão do Spark e liberta os recursos ocupados pela sessão, para que estejam disponíveis para outras sessões no mesmo pool.

Observação

O código depois session.stop() não é executado. Todos os dados e variáveis em memória são perdidos após a conclusão da sessão. Guardar dados importantes antes de ligar para session.stop().

Comportamento de retorno

O stop() método não devolve um valor. Inicia um encerramento assíncrono da sessão.

Reinicie o interpretador Python

Uso notebookutils.session.restartPython() para reiniciar o interpretador Python.

Observação

Nos cadernos PySpark (Spark), restartPython() reinicia apenas o interpretador Python mantendo o contexto Spark intacto. Nos cadernos Python, que não têm contexto Spark, restartPython() reinicia todo o processo Python.

notebookutils.session.restartPython()

Comportamento de retorno

O restartPython() método não devolve um valor. Após a conclusão do reinício, a execução do código continua na célula seguinte.

Tenha estas considerações em mente:

  • No caso de execução de referência do notebook, restartPython() só reinicia o interpretador Python do notebook atual que está a ser referenciado. Não afeta o caderno principal.
  • Em casos raros, o comando pode falhar devido ao mecanismo de reflexão do Spark. Adicionar uma nova tentativa pode mitigar o problema.
  • Após chamar restartPython(), a execução de código continua na célula seguinte. Importa pacotes recém-instalados numa célula subsequente.

Padrões de utilização

Limpeza elegante antes de parar

Use um try-finally bloco para garantir que a limpeza é executada antes da sessão terminar:

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

Instale pacotes e reinicie o interpretador

Após instalar novos pacotes com pip, reinicie o interpretador Python para que os pacotes fiquem disponíveis:

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

Observação

Após chamar restartPython(), a execução de código continua na célula seguinte. Importa os pacotes recém-instalados numa célula subsequente.

Recuperação de erros com reinício do interpretador

Se o interpretador Python atingir um estado corrompido, pode tentar a recuperação reiniciando-o:

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

Limpeza de recursos antes de parar

Limpe caminhos montados, ficheiros temporários e caches antes de terminar a sessão:

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

Paragem condicional apenas para modo interativo

Verifique o contexto de execução antes de parar para evitar chamadas desnecessárias no modo pipeline:

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

Sugestão

Guarde sempre resultados importantes — como escrever DataFrames para armazenamento ou registar a saída — antes de chamar session.stop() ou session.restartPython(). Ambas as operações descartam todo o estado em memória.