Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Используйте notebookutils.session, чтобы управлять жизненным циклом сеансов записных книжек в Microsoft Fabric. Вы можете остановить интерактивный сеанс или перезапустить интерпретатор Python для очистки, управления ресурсами и восстановления ошибок.
В следующей таблице перечислены доступные методы управления сеансами:
| Метод | Signature | Описание |
|---|---|---|
stop |
stop(): void |
Останавливает текущий интерактивный сеанс асинхронно и освобождает ресурсы. В PySpark, Scala и R notebooks принимает необязательный detach параметр. |
restartPython |
restartPython(): void |
Перезапуск интерпретатора Python при сохранении контекста Spark нетронутым. Доступно только в записных книжках Python и PySpark. |
Замечание
Этот stop() метод доступен в записных книжках Python, PySpark, Scala и R. В PySpark, Scala и R notebooks stop() принимает необязательный detach параметр: stop(detach=True) Если для detach установлено значение True (по умолчанию), сеанс отсоединяется от сеанса высокой параллелизма вместо его полной остановки.
Замечание
Этот restartPython() метод доступен только в записных книжках Python и PySpark. Он недоступен в записных книжках Scala или R.
Это важно
В режиме выполнения конвейера сеансы автоматически останавливаются после завершения кода.
session.stop() API в основном предназначен для интерактивных сеансов, где вы хотите программно остановить сеанс вместо нажатия кнопки остановки.
Замечание
Метод stop() работает асинхронно в фоновом режиме и освобождает ресурсы сеансов Spark, чтобы они стали доступными для других сеансов в том же пуле.
Остановка интерактивного сеанса
Вместо того чтобы вручную выбрать кнопку остановки, можно остановить интерактивный сеанс, вызвав API в коде.
notebookutils.session.stop() API останавливает текущий интерактивный сеанс асинхронно в фоновом режиме. Он также останавливает сеанс Spark и освобождает ресурсы, занятые сеансом, поэтому они доступны другим сеансам в том же пуле.
Замечание
Код после session.stop() не выполняется. Все данные и переменные в памяти теряются после остановки сеанса. Сохраните важные данные перед вызовом session.stop().
Поведение возврата
Метод stop() не возвращает значение. Он инициирует асинхронное завершение сеанса.
Перезапустите интерпретатор Python
Используется notebookutils.session.restartPython() для перезапуска интерпретатора Python.
Замечание
В записных книжках PySpark (Spark) restartPython() перезапускается только интерпретатор Python, а контекст Spark остается без изменений. В записных книжках Python, которые не имеют контекста Spark, restartPython() перезапускает весь процесс Python.
notebookutils.session.restartPython()
Поведение возврата
Метод restartPython() не возвращает значение. После завершения перезапуска выполнение кода продолжается в следующей ячейке.
Учитывайте следующие аспекты:
- В случае использования ссылки на записную книжку,
restartPython()перезапускает только интерпретатор Python для текущей записной книжки, на которую идет ссылка. Это не влияет на родительскую записную книжку. - В редких случаях выполнение команды может завершиться неудачей из-за механизма отражения Spark. Добавление повторных попыток может устранить проблему.
- После вызова
restartPython()выполнение кода продолжается в следующей ячейке. Выполните импорт новых установленных пакетов в последующей ячейке.
Шаблоны использования
Грациозная очистка перед остановкой
Используйте блок try-finally, чтобы убедиться, что процесс очистки запускается до остановки сеанса:
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()
Установка пакетов и перезапуск интерпретатора
После установки новых пакетов перезапустите pipинтерпретатор Python, чтобы пакеты были доступны:
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()
Замечание
После вызова restartPython()выполнение кода продолжается в следующей ячейке. Импортируйте только что установленные пакеты в последующей ячейке.
Восстановление ошибок при перезапуске интерпретатора
Если интерпретатор Python достигает поврежденного состояния, можно выполнить восстановление, перезагрузив его:
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")
Очистка ресурсов перед остановкой
Очистите подключенные пути, временные файлы и кэши перед завершением сеанса:
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()
Условная остановка только для интерактивного режима
Проверьте контекст выполнения перед остановкой, чтобы избежать ненужных вызовов в режиме конвейера:
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")
Подсказка
Всегда сохраняйте важные результаты, например запись кадров данных в хранилище или ведение журнала перед вызовом session.stop() или session.restartPython(). Обе операции удаляют все состояния в памяти.