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

 更新时间:2023年10月16日 11:09:35   作者:kwkwc  
这篇文章主要为大家介绍了Golang AGScheduler动态持久化任务调度的强大库使用实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

正文

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

AGScheduler

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

警示

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

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

特性

  • 支持三种调度方式

    • [x] 一次性执行
    • [x] 间隔执行
    • [x] Cron 式调度
  • 支持多种任务存储方式

    • [x] Memory
    • [x] GROM(任何 GROM 支持的 RDBMS 都能运行)
    • [x] Redis
    • [x] MongoDB

使用

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任务调度的资料请关注脚本之家其它相关文章!

相关文章

  • go语言中的数组指针和指针数组的区别小结

    go语言中的数组指针和指针数组的区别小结

    本文主要介绍了go语言中的数组指针和指针数组的区别小结,文中通过示例代码介绍的很详细,具有一定的参考价值,感兴趣的可以了解一下
    2024-10-10
  • go语言睡眠排序算法实例分析

    go语言睡眠排序算法实例分析

    这篇文章主要介绍了go语言睡眠排序算法,实例分析了睡眠排序算法的原理与实现技巧,需要的朋友可以参考下
    2015-03-03
  • 十个Go map面试常考问题合集

    十个Go map面试常考问题合集

    go面试中,map相关知识点问的比较多,这篇文章主要为大家整理归纳了10个常考的问题,文中的示例代码讲解详细,希望对大家有一定的帮助
    2023-07-07
  • 详解简单高效的Go struct优化

    详解简单高效的Go struct优化

    这篇文章主要为大家介绍了简单高效的Go struct优化示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • golang实现单点登录系统(go-sso)

    golang实现单点登录系统(go-sso)

    这篇文章主要介绍了golang实现单点登录系统(go-sso),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-06-06
  • golang通过mysql语句实现分页查询

    golang通过mysql语句实现分页查询

    这篇文章主要介绍了golang通过mysql语句实现分页查询,文章内容介绍详细,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-03-03
  • Go语言通过WaitGroup实现控制并发的示例详解

    Go语言通过WaitGroup实现控制并发的示例详解

    Channel能够很好的帮助我们控制并发,但是在开发习惯上与显示的表达不太相同,所以在Go语言中可以利用sync包中的WaitGroup实现并发控制,本文就来和大家详细聊聊WaitGroup如何实现控制并发
    2023-01-01
  • 深入了解Golang官方container/heap用法

    深入了解Golang官方container/heap用法

    在 Golang 的标准库 container 中,包含了几种常见的数据结构的实现,其实是非常好的学习材料。今天我们就来看看 container/heap 的源码,了解一下官方的同学是怎么设计,我们作为开发者又该如何使用
    2022-10-10
  • Golang中字符串(string)与字节数组([]byte)一行代码互转实例

    Golang中字符串(string)与字节数组([]byte)一行代码互转实例

    golang语言本身就是c的工具集,开发c的程序用到的大部分结构体,内存管理,携程等,golang基本都有,下面这篇文章主要给大家介绍了关于Golang中字符串(string)与字节数组([]byte)一行代码互转的相关资料,需要的朋友可以参考下
    2022-09-09
  • golang中的空接口使用详解

    golang中的空接口使用详解

    这篇文章主要介绍了golang中的空接口使用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03

最新评论