From 46b5f3ba3b920e27bba0feec8f57417b8e9cf778 Mon Sep 17 00:00:00 2001 From: jxxghp Date: Thu, 8 Jun 2023 08:20:19 +0800 Subject: [PATCH] graceful exit --- app/main.py | 26 +++++++++++++++++++++++--- app/schemas/subscribe.py | 1 + 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/app/main.py b/app/main.py index 32fa24e1..20b4bf86 100644 --- a/app/main.py +++ b/app/main.py @@ -1,5 +1,11 @@ +import os +import signal +import sys +from typing import Any + import uvicorn as uvicorn from fastapi import FastAPI +from uvicorn import Config from app.api.apiv1 import api_router from app.core import settings, ModuleManager, PluginManager @@ -14,6 +20,9 @@ App = FastAPI(title=settings.PROJECT_NAME, # API路由 App.include_router(api_router, prefix=settings.API_V1_STR) +# uvicorn服务 +server = uvicorn.Server(Config(App, host=settings.HOST, port=settings.PORT, reload=False)) + @App.on_event("shutdown") def shutdown_server(): @@ -23,6 +32,7 @@ def shutdown_server(): Scheduler().stop() +@App.on_event("startup") def start_module(): """ 启动模块 @@ -37,12 +47,22 @@ def start_module(): Scheduler() +def graceful_exit(signum: Any, frame: Any): + """ + 优雅退出 + """ + if server is not None: + server.should_exit = True + + +# 注册退出信号处理函数 +signal.signal(signal.SIGINT, graceful_exit) +signal.signal(signal.SIGTERM, graceful_exit) + if __name__ == '__main__': # 初始化数据库 init_db() # 更新数据库 update_db() - # 启动模块 - start_module() # 启动服务 - uvicorn.run('main:App', host=settings.HOST, port=settings.PORT, reload=False) + server.run() diff --git a/app/schemas/subscribe.py b/app/schemas/subscribe.py index 2999e72e..8f233ce3 100644 --- a/app/schemas/subscribe.py +++ b/app/schemas/subscribe.py @@ -21,6 +21,7 @@ class Subscribe(BaseModel): start_episode: Optional[int] lack_episode: Optional[int] note: Optional[str] + state: str class Config: orm_mode = True