用途:帮助在 Frappe v14/v15/v16 中实现定时任务与后台作业,语法细节另见 erpnext-syntax-scheduler。
主要能力:区分两类执行方式——按固定时间或间隔触发的 Scheduler Event(定义在 hooks.py,函数必须无参数),以及由代码执行触发的 frappe.enqueue(可传任意可序列化数据,适合用户触发的长任务)。Scheduler Event 支持 hourly、daily、weekly、monthly 及 cron 表达式(如 "0 9 * * 1-5"),all 事件应谨慎使用。队列可选 short(5 分钟)、default(5 分钟)、long(30 分钟),规则是始终显式指定队列,默认是 short。
使用方式:定时任务在 hooks.py 的 scheduler_events 中注册,例如 daily 列表引用 "myapp.tasks.daily_cleanup",修改 hooks.py 后必须执行 bench migrate。后台作业用 enqueue 指定 queue、timeout,v15+ 可用 job_id 去重(v14 用 job_name)。
限制与规则:定时任务不接收参数;调度与入队作业以 Administrator 权限运行,需显式提交;应在批次结束后统一 commit,而非逐条提交;worker 重启时入队作业会丢失。版本差异:tick 间隔 v14 为 4 分钟、v15/v16 为 60 秒;去重参数 v14 为 job_name,v15+ 为 job_id。参考文件包括 workflows.md、decision-tree.md、examples.md、anti-patterns.md。