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