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 signal
import threading import threading
import time import time
from tenacity import retry, stop_after_attempt, wait_exponential, retry_if_exception_type
from typing import Callable from typing import Callable
import uvicorn import uvicorn
from dynaconf import Dynaconf from dynaconf import Dynaconf
from fastapi import FastAPI from fastapi import FastAPI
from kn_utils.logging import logger 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.loader import validate_settings
from pyinfra.config.validators import webserver_validators 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) config = uvicorn.Config(app, host=host, port=port, log_level=logging.WARNING)
server = uvicorn.Server(config) 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: try:
await server.serve() await server.serve()
except asyncio.CancelledError: except asyncio.CancelledError:
pass logger.info("Webserver was cancelled.")
finally:
logger.info("Webserver has been shut down.")
HealthFunction = Callable[[], bool] HealthFunction = Callable[[], bool]