∞ UnlimitCanvas 创作工作台
技术手册 / 计划任务与批处理 / 设计思路与要解决的问题

设计思路与要解决的问题

41-计划任务与批处理 · 2026-10-12 · 1.8 KB
为什么要有"计划任务"?为什么要串行、要阈值、要顺延?本文讲清它的设计取舍。
本专题手工维护(2026-10-12 建);⚠ 机制与文案以应用当前版本为准(本页快照 2026-10-12)。

一、它替谁解决什么问题(五条)

#要解决的问题设计的回答
1人一个个点太慢把"一批输入"交给它 ⇒ 它一轮轮喂进画布、跑完整链 ✓
2云 GPU 会被挤爆全局串行锁(同一时间只跑一个)+ 远端队列阈值(忙就顺延,不硬挤)✓
3长链路易断(下游还没跑完就以为好了)等整条链(含下游出片)真跑完才收产物 ✓
4"显示执行中其实没跑"(假死)提供修复异常 / 强制复位这类"把它掰回来"的动作 ✓
5产物散乱产物落 jobs/<任务 id>/,并进资产库每日归集(同名自动加序号)✓

二、五条设计(每条对应一个取舍)

① 输入项驱动:一批输入 = 一批任务参数

计划任务不自己拼流程,它只负责"换输入":把输入项写进画布的「总执行入口」⇒ 由总执行入口按类型加载、广播"任务就绪"、级联驱动整条链 ✓

⇒ 好处:同一张画布、同一套流程,跑 100 个输入 = 跑 100 次 ✓(不必为每个输入画一张画布)

② 全局串行锁:安全优先,而不是"跑得最快"

⚠ 应用原话:避免并发跑画布、挤爆远端 ⇒ 所以同时只跑一个计划任务 ✓

⇒ 代价:没有"并行度"可调(这是刻意的取舍,不是缺功能)✓

③ 队列阈值 + 顺延:不跟远端抢

远端 ComfyUI 队列忙时:任务被标成「已顺延」,隔一会自己重试 ✓

⇒ 所以看到"已顺延"不是失败,是它在等队列空✓

④ 双验解锁:本地完了不代表远端完了

解锁前要验两处:本地画布链已终态 + 远端队列真正清空 ✓

(原因:本地与远端存在时间差 ⇒ 只看本地会提前解锁 ⇒ 下一条任务会跟残留任务抢算力 ✗)

⑤ 持久化 + 可复位:能救回来

  • 任务与输入参数持久化保存(关掉应用再开还在)✓
  • 提供 重置(复用) / 强制复位 / 修复异常 ⇒ 卡住时人能把状态掰回来 ✓

三、与《云算力接入》卷的边界(⚠ 别混)

主题归谁
机器怎么搭:租实例、填地址、多台并跑、节点可达性《云算力接入》卷 ✓
在一台目标上怎么排队跑:计划任务、串行锁、阈值顺延、执行日志、批量导入本卷 ✓

⇒ 交集只有一句:计划任务把"目标画布"喂给哪台算力,取决于你的引擎设置(引擎怎么配 ⇒ 见云算力/本地部署两卷)✓


四、⛔ 三件别误会(诚实边界)

别写成实际
❌ "计划任务是 cron(填时间表达式)"它是开关式常驻调度:开了就一直串行跑,不填 cron ✓
❌ "可以调并行度 / 同时跑 N 个"⛔ 不能:全局串行(同一时间只跑一个)✓
❌ "失败会自动重试"失败不自动重试 ⇒ 用「重置(复用)」把它放回队列再跑 ✓(⚠ 队列忙导致的"已顺延"是另一回事,那是自动的)✓

五、一句话总结


它="把一批输入交给一张画布,自动一轮轮跑完"的调度器
稳在哪:串行锁(不挤爆)· 阈值顺延(不跟远端抢)· 双验解锁(本地 + 远端都干净)
快在哪:你不用守在旁边点 · 一批输入自动跑完
⛔ 不是 cron · 没有并行度 · 不会自动重试

来源:E:/workbuddyProj/unlimitCanvas/ai_manual/batch_jobs/01-设计思路与要解决的问题.md