Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Node.js: asyncio, event loop, signals, OS, add_signal_handler

Как asyncio event loop позволяет подписываться на сигналы ОС?

Проверяет понимание интеграции asyncio event loop с сигналами операционной системы для асинхронной обработки.

Короткий ответ

Asyncio event loop позволяет подписываться на сигналы ОС с помощью метода loop.add_signal_handler(). Этот метод регистрирует callback, который будет вызван при получении сигнала. Это полезно для корректного завершения приложения или перезагрузки конфигурации без блокировки основного потока.

Длинный ответ

Интеграция asyncio с сигналами ОС

Asyncio event loop предоставляет возможность асинхронно обрабатывать сигналы операционной системы, такие как SIGINT (Ctrl+C) или SIGTERM. Это достигается с помощью метода loop.add_signal_handler(), который регистрирует callback для конкретного сигнала. В отличие от стандартного модуля signal, который может блокировать event loop, asyncio обрабатывает сигналы в контексте цикла событий, не прерывая выполнение других корутин.

Как это работает

Когда сигнал поступает, event loop ставит зарегистрированный callback в очередь на выполнение. Это позволяет безопасно завершить асинхронные задачи, закрыть соединения или сохранить состояние. Например, при получении SIGINT можно корректно остановить все корутины и освободить ресурсы.

Пример кода

import asyncio
import signal

async def main():
    print("Запуск...")
    await asyncio.sleep(10)
    print("Завершение")

async def shutdown():
    print("Получен сигнал, завершаем...")
    # Здесь можно выполнить очистку
    asyncio.get_event_loop().stop()

loop = asyncio.get_event_loop()
loop.add_signal_handler(signal.SIGINT, lambda: asyncio.create_task(shutdown()))
loop.run_until_complete(main())

Вывод

Использование add_signal_handler в asyncio позволяет создавать отзывчивые и устойчивые асинхронные приложения, которые корректно реагируют на системные сигналы. Это особенно полезно для серверов, демонов и долгоживущих процессов, где важно избежать потери данных или некорректного завершения.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    3

  • Сложность:

    6

Навыки

  • Node.js

    Node.js

  • Networks

Ключевые слова

#asyncio

#event loop

#signals

#OS

#add_signal_handler

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.