Проверяет понимание интеграции asyncio event loop с сигналами операционной системы для асинхронной обработки.
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 позволяет создавать отзывчивые и устойчивые асинхронные приложения, которые корректно реагируют на системные сигналы. Это особенно полезно для серверов, демонов и долгоживущих процессов, где важно избежать потери данных или некорректного завершения.
Уровень
Рейтинг:
3
Сложность:
6
Навыки
Node.js
Networks
Ключевые слова
Подпишись на Python Developer в телеграм