以前一直使用 Python 的任务调度库 APScheduler(支持任务持久化,支持多种存储方式),但由于没有找到和它功能和使用方式类似的 Golang 库,所以模仿 APScheduler 3.x 写了个简易版本的 AGScheduler。
AGScheduler
Advanced Golang Scheduler (AGScheduler) 是一款适用于 Golang 的任务调度程序,支持多种调度方式,动态更改和持久化任务
警示
该库处于实验阶段,不建议用于生产环境
链接
https://github.com/kwkwc/agscheduler
特性
- 支持三种调度方式
- 一次性执行
- 间隔执行
- Cron 式调度
- 支持多种任务存储方式
- Memory
- GROM(任何 GROM 支持的 RDBMS 都能运行)
- Redis
- MongoDB
使用
package mainimport ("fmt""log/slog""time""github.com/kwkwc/agscheduler""github.com/kwkwc/agscheduler/stores"
)func printMsg(j agscheduler.Job) {slog.Info(fmt.Sprintf("Run %s %s\n", j.Name, j.Args))
}func main() {agscheduler.RegisterFuncs(printMsg)store := &stores.MemoryStore{}scheduler := &agscheduler.Scheduler{}scheduler.SetStore(store)job := agscheduler.Job{Name: "Job",Type: agscheduler.TYPE_INTERVAL,Timezone: "UTC",Func: printMsg,Args: []any{"arg1", "arg2", "arg3"},Interval: 2 * time.Second,}jobId := scheduler.AddJob(job)job, _ = scheduler.GetJob(jobId)slog.Info(fmt.Sprintf("Scheduler add %s %s.\n\n", job.Name, job))scheduler.Start()slog.Info("Scheduler Start.\n\n")select {}
}
注册函数
由于 golang 无法序列化函数,所以
scheduler.Start()
之前需要使用RegisterFuncs
注册函数
示例
完整示例
致谢
APScheduler