VWED_server/app.py

79 lines
2.4 KiB
Python
Raw Permalink Normal View History

2025-04-30 16:57:46 +08:00
# app.py
2025-07-14 10:29:37 +08:00
from fastapi import FastAPI, Request
2025-04-30 16:57:46 +08:00
import uvicorn
import os
2025-07-14 10:29:37 +08:00
from contextlib import asynccontextmanager
2025-04-30 16:57:46 +08:00
# 导入配置
from config.settings import settings
# 导入数据库相关
from data.session import init_database, close_database_connections, close_async_database_connections
2025-07-14 10:29:37 +08:00
# 导入路由注册函数
from routes import register_routers
# 导入中间件注册函数
from middlewares import register_middlewares
# 导入日志工具
from utils.logger import get_logger
2025-04-30 16:57:46 +08:00
# 设置日志
logger = get_logger("app")
@asynccontextmanager
async def lifespan(app: FastAPI):
"""
应用程序生命周期管理
启动时初始化数据库和任务调度器关闭时清理资源
"""
# 启动前的初始化操作
# 初始化数据库
2025-07-16 10:50:00 +08:00
init_database()
2025-04-30 16:57:46 +08:00
# 启动增强版任务调度器
from services.enhanced_scheduler import scheduler
await scheduler.start(worker_count=settings.TASK_SCHEDULER_MIN_WORKER_COUNT)
logger.info(f"增强版任务调度器已启动,最小工作线程数: {settings.TASK_SCHEDULER_MIN_WORKER_COUNT},最大工作线程数: {settings.TASK_SCHEDULER_MAX_WORKER_COUNT}")
yield
# 应用程序关闭前的清理操作
logger.info("应用程序关闭中...")
# 停止增强版任务调度器
from services.enhanced_scheduler import scheduler
await scheduler.stop()
logger.info("增强版任务调度器已停止")
await close_async_database_connections() # 关闭异步数据库连接
close_database_connections() # 关闭同步数据库连接
# 创建FastAPI应用
app = FastAPI(
title=settings.APP_NAME,
description=settings.APP_DESCRIPTION,
version=settings.APP_VERSION,
lifespan=lifespan,
debug=settings.DEBUG
)
2025-07-14 10:29:37 +08:00
# 注册中间件
register_middlewares(app)
# 注册所有路由
register_routers(app)
2025-04-30 16:57:46 +08:00
# 主函数
if __name__ == "__main__":
# 从环境变量中获取端口默认为8000
2025-07-16 10:50:00 +08:00
import time
# start_time = time.time()
2025-04-30 16:57:46 +08:00
port = int(os.environ.get("PORT", settings.SERVER_PORT))
2025-07-14 10:29:37 +08:00
# 打印启动配置信息
logger.info(f"服务器配置 - Host: 0.0.0.0, Port: {port}, Workers: {settings.SERVER_WORKERS}, Reload: {settings.SERVER_RELOAD}")
2025-07-16 10:50:00 +08:00
end_time = time.time()
2025-04-30 16:57:46 +08:00
# 启动服务器
uvicorn.run(
"app:app",
host="0.0.0.0",
port=port,
2025-07-14 10:29:37 +08:00
reload=settings.SERVER_RELOAD, # 使用SERVER_RELOAD而不是DEBUG
2025-04-30 16:57:46 +08:00
workers=settings.SERVER_WORKERS
)