循环冲突解决
This commit is contained in:
parent
7ecafd2fbf
commit
927ffb896e
@ -1,10 +1,14 @@
|
|||||||
from contextlib import asynccontextmanager
|
from contextlib import asynccontextmanager
|
||||||
|
from datetime import datetime, timedelta
|
||||||
|
|
||||||
|
from apscheduler.schedulers.asyncio import AsyncIOScheduler
|
||||||
from fastapi import FastAPI
|
from fastapi import FastAPI
|
||||||
|
|
||||||
from app.client.embedding_client_manager import embedding_client
|
from app.client.embedding_client_manager import embedding_client
|
||||||
from app.client.milvus_client_manager import milvus_client
|
from app.client.milvus_client_manager import milvus_client
|
||||||
from app.client.mysql_client_manager import db_assistant_mysql_client_manager
|
from app.client.mysql_client_manager import db_assistant_mysql_client_manager
|
||||||
|
from app.core.log import logger
|
||||||
|
from app.summary.service import build
|
||||||
|
|
||||||
"""
|
"""
|
||||||
生命周期
|
生命周期
|
||||||
@ -12,12 +16,39 @@ from app.client.mysql_client_manager import db_assistant_mysql_client_manager
|
|||||||
yield
|
yield
|
||||||
容器停止时执行
|
容器停止时执行
|
||||||
"""
|
"""
|
||||||
|
scheduler = AsyncIOScheduler(timezone='Asia/Shanghai')
|
||||||
|
|
||||||
|
async def generate_daily_summary():
|
||||||
|
yesterday = datetime.now() - timedelta(days=1)
|
||||||
|
date = datetime(yesterday.year, yesterday.month, yesterday.day)
|
||||||
|
# 按 年-月-日 无补零格式输出
|
||||||
|
date_format = f"{date.year}-{date.month}-{date.day}"
|
||||||
|
#date_format = "2026-06-23"
|
||||||
|
await build(date_format)
|
||||||
|
|
||||||
|
logger.info(f"{date_format} 消息摘要生成完成")
|
||||||
|
|
||||||
@asynccontextmanager
|
@asynccontextmanager
|
||||||
async def lifespan(app: FastAPI):
|
async def lifespan(app: FastAPI):
|
||||||
db_assistant_mysql_client_manager.init()
|
db_assistant_mysql_client_manager.init()
|
||||||
embedding_client.init()
|
embedding_client.init()
|
||||||
milvus_client.init()
|
milvus_client.init()
|
||||||
|
|
||||||
|
scheduler.add_job(
|
||||||
|
generate_daily_summary,
|
||||||
|
trigger='cron',
|
||||||
|
hour=9,
|
||||||
|
minute=40,
|
||||||
|
second=0,
|
||||||
|
id='daily_summary',
|
||||||
|
name='每日消息摘要任务',
|
||||||
|
replace_existing=True
|
||||||
|
)
|
||||||
|
scheduler.start()
|
||||||
|
logger.info("定时任务调度器已开启")
|
||||||
yield
|
yield
|
||||||
await db_assistant_mysql_client_manager.close()
|
await db_assistant_mysql_client_manager.close()
|
||||||
await embedding_client.close()
|
await embedding_client.close()
|
||||||
milvus_client.close()
|
milvus_client.close()
|
||||||
|
scheduler.shutdown()
|
||||||
|
logger.info("定时任务调度器已关闭")
|
||||||
@ -35,8 +35,8 @@ class ArchiveMessagesRepository:
|
|||||||
if end_date:
|
if end_date:
|
||||||
conditions.append(" msgtime <= :end_date")
|
conditions.append(" msgtime <= :end_date")
|
||||||
params["end_date"] = end_date
|
params["end_date"] = end_date
|
||||||
#base_query += " WHERE 1=1 and roomid='' and msgtype='text' "
|
base_query += " WHERE 1=1 and roomid='' and msgtype='text' "
|
||||||
base_query += " WHERE (from_user='BuShouShiJinBuGaiMing') and roomid='' and msgtype='text' "
|
#base_query += " WHERE (from_user='BuShouShiJinBuGaiMing') and roomid='' and msgtype='text' "
|
||||||
if conditions:
|
if conditions:
|
||||||
base_query += " AND ".join(conditions)+" "
|
base_query += " AND ".join(conditions)+" "
|
||||||
base_query += " GROUP BY DATE(FROM_UNIXTIME(msgtime / 1000)), from_user ORDER BY created_at DESC, from_user;"
|
base_query += " GROUP BY DATE(FROM_UNIXTIME(msgtime / 1000)), from_user ORDER BY created_at DESC, from_user;"
|
||||||
|
|||||||
@ -216,8 +216,8 @@ async def build(day:str):
|
|||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
#
|
#
|
||||||
start = datetime(2026, 6, 17)
|
start = datetime(2026, 6, 23)
|
||||||
end = datetime(2026, 6, 17)
|
end = datetime(2026, 6, 23)
|
||||||
|
|
||||||
result = []
|
result = []
|
||||||
temp = start
|
temp = start
|
||||||
|
|||||||
@ -10,42 +10,18 @@ from app.summary.service import build
|
|||||||
from app.core.log import logger
|
from app.core.log import logger
|
||||||
|
|
||||||
app = FastAPI(lifespan=lifespan)
|
app = FastAPI(lifespan=lifespan)
|
||||||
scheduler = AsyncIOScheduler(timezone='Asia/Shanghai')
|
|
||||||
app.include_router(query_qa_router)
|
app.include_router(query_qa_router)
|
||||||
|
|
||||||
async def generate_daily_summary(date: Optional[str] = None):
|
# @app.on_event("startup")
|
||||||
if not date:
|
# async def startup_event():
|
||||||
yesterday = datetime.now() - timedelta(days=1)
|
#
|
||||||
#date = yesterday.strftime("%Y-%-m-%-d") # 格式: 2026-6-15
|
# logger.info("定时任务调度器已启动,每天凌晨2:00自动执行消息摘要任务")
|
||||||
date = datetime(yesterday.year, yesterday.month, yesterday.day)
|
#
|
||||||
|
#
|
||||||
# 按 年-月-日 无补零格式输出
|
# @app.on_event("shutdown")
|
||||||
date_format = f"{date.year}-{date.month}-{date.day}"
|
# async def shutdown_event():
|
||||||
|
# scheduler.shutdown()
|
||||||
await build(date_format)
|
# logger.info("定时任务调度器已关闭")
|
||||||
|
|
||||||
logger.info(f"{date} 消息摘要生成完成")
|
|
||||||
|
|
||||||
@app.on_event("startup")
|
|
||||||
async def startup_event():
|
|
||||||
scheduler.add_job(
|
|
||||||
generate_daily_summary,
|
|
||||||
trigger='cron',
|
|
||||||
hour=2,
|
|
||||||
minute=0,
|
|
||||||
second=0,
|
|
||||||
id='daily_summary',
|
|
||||||
name='每日消息摘要任务',
|
|
||||||
replace_existing=True
|
|
||||||
)
|
|
||||||
scheduler.start()
|
|
||||||
logger.info("定时任务调度器已启动,每天凌晨2:00自动执行消息摘要任务")
|
|
||||||
|
|
||||||
|
|
||||||
@app.on_event("shutdown")
|
|
||||||
async def shutdown_event():
|
|
||||||
scheduler.shutdown()
|
|
||||||
logger.info("定时任务调度器已关闭")
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
4
readme
4
readme
@ -1,5 +1,7 @@
|
|||||||
启动:nohup uvicorn app.uvicorn_main:app --host 0.0.0.0 --port 8000 --workers 4 > uvicorn.log 2>&1 &
|
启动:nohup uvicorn app.uvicorn_main:app --host 0.0.0.0 --port 8000 --workers 1 > uvicorn.log 2>&1 &
|
||||||
打包:py package.py
|
打包:py package.py
|
||||||
同步库+虚拟环境:uv sync
|
同步库+虚拟环境:uv sync
|
||||||
|
|
||||||
|
优化:后续将workers 1--》workers 4 在定时任务加redis分布式
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user