import logging import models from contextlib import asynccontextmanager from fastapi import FastAPI from fastapi.middleware.cors import CORSMiddleware from sqlmodel import SQLModel 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 # 配置日志 logging.basicConfig( level=logging.INFO, format='%(asctime)s - %(name)s - %(levelname)s - %(message)s' ) logger = logging.getLogger(__name__) # lifespan生命周期 @asynccontextmanager async def lifespan(app: FastAPI): # ========== 启动时执行 ========== logger.info("服务启动,开始创建数据表") # 同步建表 SQLModel.metadata.create_all(engine) # 启动定时调度器 scheduler.start() yield # 此处交出控制权,服务开始运行 # ========== 关闭时执行 ========== logger.info("服务关闭,释放资源") scheduler.shutdown() app = FastAPI(lifespan=lifespan) app.include_router(scheduler_router) app.include_router(lottery_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)