fix: simplify webserver shutdown

This commit is contained in:
Jonathan Kössler 2024-09-26 10:33:05 +02:00
parent b70b16c541
commit e2edfa7260

View File

@ -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]