feat: add support for maximum concurrency of /api/v1/videos
This commit is contained in:
@@ -10,6 +10,8 @@ from loguru import logger
|
||||
|
||||
from app.config import config
|
||||
from app.controllers import base
|
||||
from app.controllers.manager.memory_manager import InMemoryTaskManager
|
||||
from app.controllers.manager.redis_manager import RedisTaskManager
|
||||
from app.controllers.v1.base import new_router
|
||||
from app.models.exception import HttpException
|
||||
from app.models.schema import TaskVideoRequest, TaskQueryResponse, TaskResponse, TaskQueryRequest, \
|
||||
@@ -22,6 +24,35 @@ from app.utils import utils
|
||||
# router = new_router(dependencies=[Depends(base.verify_token)])
|
||||
router = new_router()
|
||||
|
||||
_enable_redis = config.app.get("enable_redis", False)
|
||||
_redis_host = config.app.get("redis_host", "localhost")
|
||||
_redis_port = config.app.get("redis_port", 6379)
|
||||
_redis_db = config.app.get("redis_db", 0)
|
||||
_redis_password = config.app.get("redis_password", None)
|
||||
_max_concurrent_tasks = config.app.get("max_concurrent_tasks", 5)
|
||||
|
||||
redis_url = f"redis://:{_redis_password}@{_redis_host}:{_redis_port}/{_redis_db}"
|
||||
# 根据配置选择合适的任务管理器
|
||||
if _enable_redis:
|
||||
task_manager = RedisTaskManager(max_concurrent_tasks=_max_concurrent_tasks, redis_url=redis_url)
|
||||
else:
|
||||
task_manager = InMemoryTaskManager(max_concurrent_tasks=_max_concurrent_tasks)
|
||||
|
||||
# @router.post("/videos-test", response_model=TaskResponse, summary="Generate a short video")
|
||||
# async def create_video_test(request: Request, body: TaskVideoRequest):
|
||||
# task_id = utils.get_uuid()
|
||||
# request_id = base.get_task_id(request)
|
||||
# try:
|
||||
# task = {
|
||||
# "task_id": task_id,
|
||||
# "request_id": request_id,
|
||||
# "params": body.dict(),
|
||||
# }
|
||||
# task_manager.add_task(tm.start_test, task_id=task_id, params=body)
|
||||
# return utils.get_response(200, task)
|
||||
# except ValueError as e:
|
||||
# raise HttpException(task_id=task_id, status_code=400, message=f"{request_id}: {str(e)}")
|
||||
|
||||
|
||||
@router.post("/videos", response_model=TaskResponse, summary="Generate a short video")
|
||||
def create_video(background_tasks: BackgroundTasks, request: Request, body: TaskVideoRequest):
|
||||
@@ -34,7 +65,8 @@ def create_video(background_tasks: BackgroundTasks, request: Request, body: Task
|
||||
"params": body.dict(),
|
||||
}
|
||||
sm.state.update_task(task_id)
|
||||
background_tasks.add_task(tm.start, task_id=task_id, params=body)
|
||||
# background_tasks.add_task(tm.start, task_id=task_id, params=body)
|
||||
task_manager.add_task(tm.start, task_id=task_id, params=body)
|
||||
logger.success(f"video created: {utils.to_json(task)}")
|
||||
return utils.get_response(200, task)
|
||||
except ValueError as e:
|
||||
|
||||
Reference in New Issue
Block a user