refactor(scheduler): 采用无锁设计,对统一调度器进行全面改造

- 用完全异步、无锁的架构替换传统的调度器
- 通过独立的执行上下文实现任务隔离
- 增加具有多级超时保护的全面死锁检测功能
- 引入健康评分和自动恢复机制
- 增加资源管理功能,并自动清理已完成的任务
- 实现可配置的并发控制和优雅降级
- 通过详细的执行历史记录,增强任务状态跟踪
- 通过适当的参数注入来改进事件处理
- 增加全面的统计和监控功能
- 保持与系统管理插件中状态字段的向后兼容性

重构后的调度器利用asyncio的单线程特性,消除了所有锁定机制,从而彻底防止死锁。每个任务都在完全隔离的状态下运行,确保故障不会影响其他任务。新架构包括多级超时保护、自动资源清理和全面的健康监测。
This commit is contained in:
Windpicker-owo
2025-11-09 18:06:06 +08:00
parent f4236c9ea7
commit 2269e693d9
2 changed files with 1049 additions and 730 deletions

View File

@@ -190,7 +190,9 @@ class SystemCommand(PlusCommand):
response_parts = [f"📅 定时任务列表 (共 {len(tasks)} 个):"]
for task in tasks:
status = "▶️" if task["is_active"] else "⏸️"
# 使用新的 status 字段,兼容旧版本
is_active = task.get("status") == "PENDING" if "status" in task else task.get("is_active", False)
status = "▶️" if is_active else "⏸️"
recurring = "🔁" if task["is_recurring"] else "➡️"
response_parts.append(
f"{status} `{task['task_name']}` ({task['trigger_type']}) {recurring}\n"

File diff suppressed because it is too large Load Diff