chore: bump version to 0.7.1
This commit is contained in:
86
backend/main.py
Normal file
86
backend/main.py
Normal file
@@ -0,0 +1,86 @@
|
||||
'''
|
||||
Date: 2025-05-06 09:26:51
|
||||
LastEditors: 陈子健
|
||||
LastEditTime: 2025-05-26 17:14:17
|
||||
FilePath: /mac-lyric-vue/backend/main.py
|
||||
'''
|
||||
"""
|
||||
lyroc 后端主程序
|
||||
负责初始化应用和启动服务器
|
||||
"""
|
||||
import uvicorn
|
||||
import os
|
||||
import logging
|
||||
from contextlib import asynccontextmanager
|
||||
from fastapi import FastAPI
|
||||
from fastapi.middleware.cors import CORSMiddleware
|
||||
|
||||
# 导入自定义模块
|
||||
from modules.websocket_manager import ConnectionManager
|
||||
from modules.background_tasks import start_background_task, cancel_all_tasks, background_tasks
|
||||
from modules.routes import register_routes
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format='%(asctime)s - %(levelname)s - %(message)s'
|
||||
)
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# 应用支持目录和歌词目录在lyrics模块中已定义
|
||||
|
||||
# Lifespan 上下文管理器,替代 on_event
|
||||
@asynccontextmanager
|
||||
async def lifespan(app: FastAPI):
|
||||
logger.info("正在启动API服务...")
|
||||
try:
|
||||
# 启动时创建后台任务
|
||||
start_background_task(manager)
|
||||
logger.info("后台任务已启动")
|
||||
except Exception as e:
|
||||
logger.error(f"启动后台任务失败: {e}")
|
||||
|
||||
yield # 应用正常运行
|
||||
|
||||
# 关闭时清理任务
|
||||
try:
|
||||
cancel_all_tasks()
|
||||
logger.info("后台任务已关闭")
|
||||
except Exception as e:
|
||||
logger.error(f"关闭后台任务失败: {e}")
|
||||
|
||||
# 创建FastAPI应用
|
||||
app = FastAPI(lifespan=lifespan)
|
||||
|
||||
# 确保在应用启动时直接启动任务(作为后备方案)
|
||||
@app.on_event("startup")
|
||||
async def startup_event():
|
||||
# 仅当通过 lifespan 未启动任务时才启动
|
||||
if not background_tasks:
|
||||
logger.info("通过startup_event启动后台任务...")
|
||||
try:
|
||||
start_background_task(manager)
|
||||
logger.info("后台任务通过startup_event成功启动")
|
||||
except Exception as e:
|
||||
logger.error(f"通过startup_event启动后台任务失败: {e}")
|
||||
|
||||
# 配置CORS
|
||||
app.add_middleware(
|
||||
CORSMiddleware,
|
||||
allow_origins=["*"],
|
||||
allow_credentials=True,
|
||||
allow_methods=["*"],
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
# 创建WebSocket连接管理器
|
||||
manager = ConnectionManager()
|
||||
|
||||
# 注册API路由
|
||||
register_routes(app, manager)
|
||||
|
||||
if __name__ == "__main__":
|
||||
# 从环境变量获取端口号,如果未设置则默认使用5000
|
||||
port = int(os.environ.get("PORT", 5000))
|
||||
logger.info(f"启动后端服务器在端口: {port}")
|
||||
uvicorn.run("main:app", host="127.0.0.1", port=port, reload=True)
|
||||
Reference in New Issue
Block a user