用途:为 Frappe 后台任务与计划任务提供生产级可靠性参考,是 frappe.enqueue 与 scheduler_events 基础用法的进阶补充。主要能力包括:按 short/default/long 三类 RQ 队列选择并设置显式 timeout;处理 now、enqueue_after_commit、is_async 等入队标志及文档生命周期钩子的竞态规则;用 cron 表达式编写 scheduler_events,并让调度入口快速转投 long 队列;通过前置检查、job_name 去重、乐观更新实现幂等;用 Redis 缓存或 SETNX 实现分布式锁;手动捕获瞬时错误并以退避方式重试;用 show-pending-jobs、scheduler-events、doctor、worker 日志、py-spy、strace 等排查卡住任务;处理 worker 内存泄漏;对长任务分块提交并用 publish_realtime 上报进度。使用方式:在 hooks.py 配置 scheduler_events,在任务模块调用 frappe.enqueue,命令如 bench --site mysite show-pending-jobs、bench restart-workers 可直接复用。适用场景:ERPNext 等 Frappe 应用的邮件发送、文档处理、批量导入、月报、数据迁移、外部接口同步。限制:Frappe 不自动重试失败任务,也无原生延迟入队,需借助 cron 或自定义 RQ 调度器;缓存锁非原子,涉及资金或库存才建议用 SETNX;worker 不在任务间重启。
scheduler-and-jobs
部署与运维
更新于 10-16 05:43