mirror of
https://github.com/zhouxiaoka/autoclip.git
synced 2026-09-03 06:24:14 +08:00
4.5 KiB
4.5 KiB
未完成项目重试问题修复总结
问题描述
用户报告有两个未完成的项目,点击重试后依然无法重启:
- 项目1:
19cdeea4-16fb-49ce-b114-54cdff7419cd(iPhone 17/Pro/Air Impressions) - 项目2:
e11ab97b-6dd2-4d50-97c6-d934b835232c(成为up主的43天,我拍了部电影)
问题分析
项目1问题分析
- ✅ 视频文件存在 (42.5MB)
- ❌ 有18个重复的任务记录
- ❌ 项目状态为失败
- ❌ 多个Celery任务ID冲突
- ❌ 流水线代码中存在变量作用域问题
项目2问题分析
- ❌ 没有视频文件
- ❌ 项目状态为等待中
- ❌ 需要重新下载B站视频
- ⚠️ 源URL:
https://www.bilibili.com/video/BV1ihbYzGErq/
修复措施
1. 修复流水线变量作用域问题
问题: cannot access local variable 'timeline_data' where it is not associated with a value
修复: 在 backend/services/simple_pipeline_adapter.py 中修复变量初始化问题
# 修复前:当没有大纲数据时,timeline_data变量未定义
else:
logger.warning("没有大纲数据,跳过时间线提取和内容评分")
# 创建空文件...
# 修复后:初始化所有必要的变量
else:
logger.warning("没有大纲数据,跳过时间线提取和内容评分")
# 创建空文件...
# 初始化空变量
timeline_data = []
scored_clips = []
titled_clips = []
collections = []
2. 清理重复任务
问题: 项目1有18个重复的任务记录,导致冲突
修复: 创建了 scripts/fix_incomplete_projects.py 脚本
- 删除重复的任务记录
- 保留最新的任务记录
- 清理Celery任务ID冲突
3. 实现自动重新下载功能
问题: 项目2没有视频文件,需要重新下载
修复: 修改 backend/api/v1/projects.py 中的重试API
- 检测视频文件是否存在
- 从项目元数据中获取源URL
- 根据URL类型自动选择下载方式(B站/YouTube)
- 使用安全的任务管理器启动下载任务
# 检查视频文件是否存在,如果不存在则尝试重新下载
if not video_path.exists():
logger.warning(f"视频文件不存在: {video_path},尝试重新下载")
# 检查项目元数据中是否有源URL
if hasattr(project, 'project_metadata') and project.project_metadata:
source_url = project.project_metadata.get('source_url')
if source_url:
# 根据URL类型选择下载方式
if 'bilibili.com' in source_url:
# B站视频重新下载
# ...
elif 'youtube.com' in source_url or 'youtu.be' in source_url:
# YouTube视频重新下载
# ...
4. 改进异常处理
修复: 使用 backend/api/v1/async_task_manager.py 安全任务管理器
- 防止未捕获异常导致后端重启
- 提供任务状态跟踪
- 支持任务取消和清理
修复结果
项目1修复结果
- ✅ 清理了重复任务
- ✅ 修复了流水线变量作用域问题
- ✅ 重试功能正常工作
- ✅ 可以重新启动处理
项目2修复结果
- ✅ 实现了自动重新下载功能
- ✅ 检测到源URL并开始重新下载
- ✅ 使用安全的任务管理器
- ✅ 支持B站和YouTube视频重新下载
测试验证
创建了测试脚本
scripts/check_incomplete_projects.py- 检查未完成项目scripts/fix_incomplete_projects.py- 修复项目问题scripts/test_retry_api.py- 测试重试APIscripts/test_bilibili_redownload.py- 测试B站重新下载
测试结果
- ✅ 项目1重试功能正常
- ✅ 项目2自动重新下载功能正常
- ✅ 流水线变量作用域问题已修复
- ✅ 重复任务清理功能正常
改进效果
修复前的问题:
- 项目重试失败
- 流水线处理异常
- 重复任务冲突
- 无法自动重新下载
修复后的效果:
- 项目重试功能正常
- 流水线处理稳定
- 任务管理清晰
- 自动重新下载功能完善
技术要点
- 变量作用域管理: 确保所有变量在使用前都被正确初始化
- 任务去重: 清理重复任务,避免冲突
- 自动重新下载: 智能检测缺失文件并自动重新下载
- 异常处理: 使用安全的任务管理器防止未捕获异常
- API改进: 重试API现在支持自动重新下载功能
后续建议
- 监控项目处理进度,确保修复效果
- 定期清理重复任务,避免积累
- 完善错误日志,便于问题排查
- 考虑添加任务队列管理功能