增加celery任务队列,任务持久化(服务重启不丢)、支持多 Worker 水平扩展、失败自动重试

This commit is contained in:
2026-05-28 17:59:39 +08:00
parent 6ad22e4466
commit 44902207c9
9 changed files with 133 additions and 47 deletions
+17 -11
View File
@@ -65,8 +65,15 @@ class ProcessingService:
try:
logger.info(f"开始处理文件并生成模具型腔: {file_path}")
# 设置处理超时(5分钟)
timeout_seconds = 300
from config.settings import settings
file_size_bytes = Path(file_path).stat().st_size if Path(file_path).exists() else 0
file_size_mb = max(file_size_bytes / (1024 * 1024), 1)
timeout_seconds = min(
max(settings.PROCESSING_TIMEOUT_BASE, int(file_size_mb * settings.PROCESSING_TIMEOUT_PER_MB)),
1800,
)
logger.info(f"处理超时设置为 {timeout_seconds}s (文件 {file_size_mb:.1f}MB)")
try:
await asyncio.wait_for(
@@ -575,7 +582,7 @@ class ProcessingService:
pointcloud_data: Optional[Dict[str, Any]] = None,
lod_data: Optional[Dict[str, Any]] = None,
) -> Dict[str, Any]:
"""为每个候选分模方案生成独立HTML预览链接。"""
"""为候选分模方案生成轻量摘要链接(完整HTML仅最优方案按需生成)"""
candidate_schemes = detailed_cavity_json.get("candidate_schemes", [])
if not candidate_schemes:
return detailed_cavity_json
@@ -585,15 +592,14 @@ class ProcessingService:
if not cavity_data:
continue
suffix = scheme.get("scheme_id")
html_path = self.html_generator.generate_and_save_visualization(
geometry_data,
stp_filename,
cavity_data=cavity_data,
pointcloud_data=pointcloud_data,
suffix=suffix,
lod_data=lod_data,
base_stem = Path(stp_filename).stem.replace(" ", "_")
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
summary_name = f"mold_{base_stem}_{suffix}_{ts}_summary.json"
summary_content = self.html_generator.generate_3d_viewer_summary(
geometry_data, cavity_data
)
scheme["html_file"] = f"/html/{Path(html_path).name}"
self.html_generator.save_data_file(summary_content, summary_name)
scheme["summary_file"] = f"/html/{summary_name}"
best_scheme = CalculationService.get_best_scheme(detailed_cavity_json)
if best_scheme: