VWED_server/app.py

104 lines
3.5 KiB
Python
Raw 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}")
2025-09-09 10:41:27 +08:00
# 启动库区锁清理任务
from utils.area_lock_manager import start_lock_cleanup_task
await start_lock_cleanup_task()
logger.info("库区锁管理器已初始化")
2025-09-20 16:50:45 +08:00
# 启动设备处理服务和MQTT服务
try:
from services.online_script.device_handler_service import get_device_service
device_service = get_device_service()
await device_service.start_service()
logger.info("设备处理服务已启动")
except Exception as e:
logger.error(f"启动设备处理服务失败: {e}", exc_info=True)
# 即使MQTT服务启动失败也不中断应用启动
logger.warning("设备处理服务启动失败,但应用将继续运行")
2025-04-30 16:57:46 +08:00
yield
# 应用程序关闭前的清理操作
logger.info("应用程序关闭中...")
2025-09-20 16:50:45 +08:00
# 停止设备处理服务
try:
from services.online_script.device_handler_service import get_device_service
device_service = get_device_service()
await device_service.stop_service()
logger.info("设备处理服务已停止")
except Exception as e:
logger.error(f"停止设备处理服务失败: {e}", exc_info=True)
2025-04-30 16:57:46 +08:00
# 停止增强版任务调度器
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-08-13 15:27:04 +08:00
# port = int(os.environ.get("PORT", settings.SERVER_PORT))
2025-09-09 10:41:27 +08:00
port = 8000
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
)