feat(task): 后台任务改为apscheduler执行

This commit is contained in:
xingc
2025-05-12 20:08:50 +08:00
parent eec9d3048c
commit 680c5c2b63
9 changed files with 74 additions and 11 deletions

View File

@@ -4,7 +4,9 @@
# @Software : PyCharm
# @Author : xingc
# @Desc :
from typing import AsyncGenerator
import functools
import logging
from typing import AsyncGenerator, Callable
import redis.asyncio as aioredis
from sqlalchemy.ext.asyncio import create_async_engine, async_sessionmaker
@@ -12,6 +14,7 @@ from sqlalchemy.ext.asyncio import AsyncSession
from config import settings
logger = logging.getLogger(__name__)
engine = create_async_engine(
(
settings.DB_URL or
@@ -39,6 +42,26 @@ async def get_async_session() -> AsyncGenerator[AsyncSession, None]:
yield session
def async_db_session():
""" 异步获取db_session装饰器。 """
def decorator(func: Callable):
@functools.wraps(func)
async def wrapper(*args, **kwargs):
async with session_maker() as session:
try:
kwargs.setdefault('db_session', session)
return await func(*args, **kwargs)
except Exception as e:
await session.rollback()
logger.exception(e)
return None
return wrapper
return decorator
def create_redis_pool():
return aioredis.ConnectionPool(
host=settings.REDIS_HOST, port=settings.REDIS_PORT, password=settings.REDIS_PASSWORD, db=settings.REDIS_DB,