Files
lotteryServer/main.py
2026-09-07 13:24:09 +08:00

75 lines
2.0 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import structlog
import models
from contextlib import asynccontextmanager
from fastapi import FastAPI
from fastapi.middleware.cors import CORSMiddleware
from sqlmodel import SQLModel
from api.agent_api import agent_router
from core.config.logging_cof import setup_logging
from core.db import engine
from core.config.settings import settings
from api.scheduler_api import scheduler_router
from api.lottery_api import lottery_router
from core.task.dlt_scheduler import scheduler
from exceptions.handlers import register_exception_handlers
from lc.chef_agent import chef_agent
# 全局设置日志配置
setup_logging()
logger = structlog.getLogger(__name__)
# lifespan生命周期
@asynccontextmanager
async def lifespan(app: FastAPI):
# ========== 启动时执行 ==========
logger.info("服务启动,开始创建数据表")
# 同步建表
SQLModel.metadata.create_all(engine)
logger.info("服务启动,启动定时调度器")
# 启动定时调度器
scheduler.start()
logger.info("服务启动创建携程初始化chef_agent任务")
# 异步初始化chef_agent
chef_agent.initialize()
logger.info("服务启动完成")
try:
yield # 此处交出控制权,服务开始运行
finally:
# ========== 关闭时执行 ==========
logger.info("服务关闭,释放资源")
chef_agent.close()
scheduler.shutdown()
app = FastAPI(lifespan=lifespan)
# 注册全局异常处理
register_exception_handlers(app)
# 注册路由
app.include_router(scheduler_router)
app.include_router(lottery_router)
app.include_router(agent_router)
# 注册中间件
app.add_middleware(
CORSMiddleware, # type: ignore[arg-type]
allow_origins=settings.ALLOWED_ORIGINS,
allow_credentials=True,
allow_methods=settings.ALLOWED_METHODS,
allow_headers=settings.ALLOWED_HEADERS,
)
@app.get("/")
def main():
return {"message": "Hello World"}
# 启动服务 --> uvicorn: Python中的轻量级web服务器
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)