2026-01-15 17:09:43 +08:00
|
|
|
|
"""FastAPI应用入口"""
|
2026-01-15 17:46:55 +08:00
|
|
|
|
import asyncio
|
2026-01-15 17:09:43 +08:00
|
|
|
|
import logging
|
|
|
|
|
|
from contextlib import asynccontextmanager
|
|
|
|
|
|
from fastapi import FastAPI
|
|
|
|
|
|
from app.core.config import settings
|
|
|
|
|
|
from app.core.logging import setup_logging
|
|
|
|
|
|
from app.api import router
|
2026-01-15 22:08:12 +08:00
|
|
|
|
from app.services import kafka_service
|
2026-01-15 17:09:43 +08:00
|
|
|
|
|
|
|
|
|
|
setup_logging()
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@asynccontextmanager
|
|
|
|
|
|
async def lifespan(app: FastAPI):
|
|
|
|
|
|
"""应用生命周期管理"""
|
|
|
|
|
|
logger.info("服务启动中...")
|
2026-01-15 17:46:55 +08:00
|
|
|
|
|
|
|
|
|
|
# 自动启动所有采集任务
|
|
|
|
|
|
if settings.crawler.auto_start:
|
|
|
|
|
|
from app.services import crawler_manager
|
|
|
|
|
|
logger.info("自动启动采集任务...")
|
|
|
|
|
|
asyncio.create_task(crawler_manager.start_all())
|
|
|
|
|
|
|
2026-01-15 17:09:43 +08:00
|
|
|
|
yield
|
2026-01-15 17:46:55 +08:00
|
|
|
|
|
2026-01-15 17:09:43 +08:00
|
|
|
|
logger.info("服务关闭中...")
|
2026-01-15 17:46:55 +08:00
|
|
|
|
from app.services import crawler_manager
|
|
|
|
|
|
crawler_manager.stop_all()
|
2026-01-15 22:08:12 +08:00
|
|
|
|
kafka_service.close()
|
2026-01-15 17:09:43 +08:00
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app = FastAPI(
|
|
|
|
|
|
title="招聘数据采集服务",
|
|
|
|
|
|
description="从八爪鱼API采集招聘数据,通过Kafka提供消费接口",
|
|
|
|
|
|
version=settings.app.version,
|
|
|
|
|
|
lifespan=lifespan
|
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
|
|
app.include_router(router)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|
import uvicorn
|
|
|
|
|
|
uvicorn.run("app.main:app", host="0.0.0.0", port=8000, reload=True)
|