close¶
- NativeDumper.close()¶
- Результат:
Ничего не возвращает (
None)- Тип результата:
None
Корректное закрытие сессии и освобождение всех ресурсов NativeDumper.
Описание:
Метод выполняет полное закрытие соединения с сервером ClickHouse и освобождение всех связанных ресурсов. Это финальная операция в жизненном цикле NativeDumper, после которой объект не может быть использован для дальнейших операций.
Что делает метод:
Закрывает курсор - вызывает
cursor.close()для освобождения соединенияОсвобождает сетевые ресурсы - закрывает сокеты и HTTP-соединения
Очищает внутренние буферы - освобождает память от временных данных
Логирует завершение - записывает информационное сообщение о закрытии
Делает объект непригодным для использования - последующие вызовы методов вызовут ошибки
Когда использовать close():
Завершение работы приложения - при выходе из программы
Освобождение ресурсов - когда NativeDumper больше не нужен
Пересоздание соединения - перед созданием нового экземпляра
Обработка исключений - гарантированное освобождение ресурсов при ошибках
Сообщения в логе:
При успешном выполнении метода в лог записывается сообщение:
INFO: Connection to host localhost closed.
Поведение после close():
После вызова close() объект NativeDumper переходит в нерабочее состояние:
dumper = NativeDumper(connector)
dumper.close()
# Последующие вызовы вызовут исключения
try:
dumper.write_dump(open("data.bin", "rb"), "test.table")
except Exception as e:
print(f"Ошибка: {e}") # "Operation on closed NativeDumper"
try:
dumper.refresh()
except Exception as e:
print(f"Ошибка: {e}") # "NativeDumper is closed"
Рекомендации по использованию:
Всегда закрывайте NativeDumper - предотвращение утечек ресурсов
Закрывайте в finally - гарантия освобождения ресурсов при ошибках
Не используйте после close() - создавайте новый экземпляр при необходимости
Документируйте время жизни - в больших приложениях
Сценарии когда close() критически важен:
Долгоживущие процессы - сервисы, демоны, которые создают много подключений
Приложения с ограничениями памяти - предотвращение утечек
Сервисы с ограничениями на количество соединений - освобождение лимитов
Тестовые среды - очистка между тестами
Контейнеризированные приложения - корректное завершение работы
Лучшие практики:
Шаблон RAII (Resource Acquisition Is Initialization):
class ManagedNativeDumper:
"""Управляемый NativeDumper с автоматическим закрытием."""
def __init__(self, connector):
self._dumper = NativeDumper(connector)
def __enter__(self):
return self._dumper
def __exit__(self, exc_type, exc_val, exc_tb):
self._dumper.close()
# Делегирование методов
def write_dump(self, *args, **kwargs):
return self._dumper.write_dump(*args, **kwargs)
# Использование
with ManagedNativeDumper(connector) as dumper:
dumper.write_dump(fileobj, "test.table")
Декоратор для автоматического закрытия:
from functools import wraps
def with_native_dumper(connector_factory):
"""Декоратор для автоматического создания и закрытия NativeDumper."""
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
connector = connector_factory()
dumper = NativeDumper(connector)
try:
# Передаем dumper как первый аргумент
return func(dumper, *args, **kwargs)
finally:
dumper.close()
return wrapper
return decorator
# Использование
@with_native_dumper(lambda: CHConnector(host="localhost", port=8123))
def process_data(dumper, filename, table_name):
with open(filename, "rb") as f:
dumper.write_dump(f, table_name)
Примечания:
После
close()объект нельзя использовать повторноМетод идемпотентен - multiple calls are safe
Не вызывает исключений при повторном вызове
Рекомендуется вызывать даже если были ошибки в работе NativeDumper
В сочетании с
refresh()обеспечивает полный контроль над жизненным циклом
См. также:
refresh - Обновление сессии без закрытия