diff --git a/pyinfra/webserver/utils.py b/pyinfra/webserver/utils.py index 5debb15..b87f380 100644 --- a/pyinfra/webserver/utils.py +++ b/pyinfra/webserver/utils.py @@ -4,13 +4,18 @@ import logging import signal import threading import time -from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type from typing import Callable import uvicorn from dynaconf import Dynaconf from fastapi import FastAPI from kn_utils.logging import logger +from tenacity import ( + retry, + retry_if_exception_type, + stop_after_attempt, + wait_exponential, +) from pyinfra.config.loader import validate_settings from pyinfra.config.validators import webserver_validators @@ -56,20 +61,12 @@ async def run_async_webserver(app: FastAPI, port: int, host: str): config = uvicorn.Config(app, host=host, port=port, log_level=logging.WARNING) server = uvicorn.Server(config) - async def shutdown(signal): - logger.info(f"Received signal {signal.name}, shutting down webserver...") - await app.shutdown() - await app.cleanup() - logger.info("Shutdown complete.") - - loop = asyncio.get_event_loop() - for sig in (signal.SIGTERM, signal.SIGINT): - loop.add_signal_handler(sig, lambda s=sig: asyncio.create_task(shutdown(s))) - try: await server.serve() except asyncio.CancelledError: - pass + logger.info("Webserver was cancelled.") + finally: + logger.info("Webserver has been shut down.") HealthFunction = Callable[[], bool]