TGViewer
Библиотека питониста | Python, Django, Flask Библиотека питониста | Python, Django, Flask @pyproglib · 37.2K subscribers
Post #6989 3.51K
➡️ Как использовать atexit для безопасного завершения Python-приложений

Когда вы работаете с сетевыми приложениями, важно не просто обрабатывать данные, но и корректно завершать работу сервера: сохранять остатки в памяти, закрывать соединения, выгружать данные.

✳️ Для этого у Python есть скрытая суперсила — модуль atexit. Он позволяет регистрировать функции, которые автоматически выполняются при нормальном завершении Python-программы.

Это полезно, если нужно:
— Сохранить кэш
— Очистить ресурсы
— Завершить фоновые потоки
— Записать метрики или логи

✳️Но: atexit не срабатывает при аварийном завершении (например, os._exit() или падении интерпретатора). Для этого используйте signal.

⏩️ Мини-проект: клиент-сервер + atexit

Сервер:
— Получает UDP-пакеты с метриками от клиента
— Сохраняет данные в in-memory SQLite
— Использует queue.Queue и фоновый daemon-поток для обработки данных
— При завершении работы сохраняет все необработанные данные из очереди с помощью atexit

Код:
import atexit

def shutdown_handler():
# Извлекаем всё из очереди
while not ingest_queue.empty():
buffer.append(ingest_queue.get())
# Сохраняем в БД
_persist_data(buffer, conn)

atexit.register(shutdown_handler)


Клиент:
— Отправляет случайные данные (температура, влажность, sensor\_id)
— Работает в бесконечном цикле
— Завершается по Ctrl+C

Код:
while True:
data = {
"sensor_id": ...,
"temperature": ...,
...
}
client_socket.sendto(json.dumps(data).encode(), addr)
time.sleep(0.01)


⏩️ Почему это важно

В продакшн-сервисах вы не хотите терять данные, если:
— Процесс завершился вручную
— Контейнер Docker останавливается
— Система инициирует shutdown

⏩️ Выводы

— Используйте atexit для мягкой очистки: логов, файлов, очередей, соединений
— Комбинируйте с signal, если важно обрабатывать SIGINT, SIGTERM
— Даже небольшие скрипты выигрывают от аккуратного завершения

Библиотека питониста #буст
  • 👍 9
  • ❤ 5
  • 🔥 1
  • 😍 1
More from @pyproglib
  1. Oct 12, 2026👀 Как вы смотрите видео? Разбираете урок, слушаете интервью фоном или начинаете на телефо…
  2. Oct 9, 2026Post #7855
  3. Oct 9, 2026Showboat и Rodney помогают показать работу ИИ-агента Саймон Уиллисон собирает демонстрации…
  4. Oct 7, 2026🎓 С Днём учителя! Учиться никогда не поздно — особенно когда технологии меняются быстрее,…
  5. Oct 3, 2026📚Напоминаем про наш полный курс «Самоучитель по Python для начинающих» Мы написали и собр…
  6. Oct 2, 2026🎹 Что делать после ChatGPT? Следующий шаг — AI-агенты. Они не просто отвечают на запросы,…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →