Golang

关注公众号 jb51net

关闭
首页 > 脚本专栏 > Golang > Go AGScheduler任务调度

Golang AGScheduler动态持久化任务调度的强大库使用实例

作者:kwkwc

这篇文章主要为大家介绍了Golang AGScheduler动态持久化任务调度的强大库使用实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

以前一直使用 Python 的任务调度库 APScheduler(支持任务持久化,支持多种存储方式),但由于没有找到与它功能和使用方式类似的 Golang 库,所以模仿 APScheduler 3.x 写了个简易版本的 AGScheduler。

AGScheduler

Advanced Golang Scheduler (AGScheduler) 是一款适用于 Golang 的任务调度程序,支持多种调度方式,动态更改和持久化任务

警示

该库处于实验阶段,不建议用于生产环境

链接 https://github.com/kwkwc/agscheduler

特性

使用

package main
import (
    "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

以上就是Golang AGScheduler动态持久化任务调度的强大库使用实例的详细内容,更多关于Go AGScheduler任务调度的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文