fix: simplify webserver shutdown
This commit is contained in:
parent
b70b16c541
commit
e2edfa7260
@ -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]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user