You've already forked FrameTour-RenderWorker
refactor
This commit is contained in:
@@ -1,4 +1,3 @@
|
||||
import json
|
||||
import logging
|
||||
import os
|
||||
from abc import ABC, abstractmethod
|
||||
@@ -12,6 +11,7 @@ from services.render_service import RenderService
|
||||
from services.template_service import TemplateService
|
||||
from util.exceptions import TaskError, TaskValidationError
|
||||
from util import api, oss
|
||||
from util.json_utils import safe_json_loads
|
||||
from telemetry import get_tracer
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
@@ -133,11 +133,11 @@ class DefaultTaskService(TaskService):
|
||||
task_params_str = task_info.get("taskParams", "{}")
|
||||
span.set_attribute("task_params", task_params_str)
|
||||
|
||||
try:
|
||||
task_params = json.loads(task_params_str)
|
||||
task_params_orig = json.loads(task_params_str)
|
||||
except json.JSONDecodeError as e:
|
||||
raise TaskValidationError(f"Invalid task params JSON: {e}")
|
||||
task_params = safe_json_loads(task_params_str, {})
|
||||
task_params_orig = safe_json_loads(task_params_str, {})
|
||||
|
||||
if not task_params:
|
||||
raise TaskValidationError("Invalid or empty task params JSON")
|
||||
|
||||
# 并行下载资源
|
||||
self._download_resources(task_params)
|
||||
@@ -192,14 +192,34 @@ class DefaultTaskService(TaskService):
|
||||
|
||||
def _download_resources(self, task_params: Dict[str, Any]):
|
||||
"""并行下载资源"""
|
||||
with ThreadPoolExecutor(max_workers=8) as executor:
|
||||
from config.settings import get_ffmpeg_config
|
||||
config = get_ffmpeg_config()
|
||||
|
||||
download_futures = []
|
||||
|
||||
with ThreadPoolExecutor(max_workers=config.max_download_workers) as executor:
|
||||
for param_list in task_params.values():
|
||||
if isinstance(param_list, list):
|
||||
for param in param_list:
|
||||
url = param.get("url", "")
|
||||
if url.startswith("http"):
|
||||
_, filename = os.path.split(url)
|
||||
executor.submit(oss.download_from_oss, url, filename, True)
|
||||
future = executor.submit(oss.download_from_oss, url, filename, True)
|
||||
download_futures.append((future, url, filename))
|
||||
|
||||
# 等待所有下载完成,并记录失败的下载
|
||||
failed_downloads = []
|
||||
for future, url, filename in download_futures:
|
||||
try:
|
||||
result = future.result(timeout=30) # 30秒超时
|
||||
if not result:
|
||||
failed_downloads.append((url, filename))
|
||||
except Exception as e:
|
||||
logger.warning(f"Failed to download {url}: {e}")
|
||||
failed_downloads.append((url, filename))
|
||||
|
||||
if failed_downloads:
|
||||
logger.warning(f"Failed to download {len(failed_downloads)} resources: {[f[1] for f in failed_downloads]}")
|
||||
|
||||
def _parse_video_source(self, source: str, task_params: Dict[str, Any],
|
||||
template_info: Dict[str, Any]) -> tuple[Optional[str], Dict[str, Any]]:
|
||||
|
||||
Reference in New Issue
Block a user