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

相关文章

  • golang通过context控制并发的应用场景实现

    golang通过context控制并发的应用场景实现

    这篇文章主要介绍了golang通过context控制并发的应用场景实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • Golang实现验证一个字符串是否为URL

    Golang实现验证一个字符串是否为URL

    在实际开发过程中,有时候会遇到 URL 的校验问题,Go 语言中有哪些方法去验证一个字符串是否满足 URL 格式呢?本文就来和大家详细讲讲
    2023-04-04
  • 详解Go中defer与return的执行顺序

    详解Go中defer与return的执行顺序

    Go defer中改变return的值会生效吗,这就设计到了GO语言中defer与return哪个先执行的问题了,下面小编就通过简单的示例来和大家讲讲吧
    2023-07-07
  • Golang中make与new使用区别小结

    Golang中make与new使用区别小结

    Go语言中new和make是内建的两个函数,主要用来创建分配类型内存,本文主要给大家介绍了Go语言中函数new与make的使用和区别,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • 深入了解Golang中的数据类型

    深入了解Golang中的数据类型

    在计算机编程中,数据类型是非常重要的一个概念。这篇文章将详细介绍 Golang中的数据类型,包括基本类型、复合类型、引用类型以及自定义类型,希望对大家有所帮助
    2023-04-04
  • Go语言读取文件的方法小结

    Go语言读取文件的方法小结

    写程序时经常需要从一个文件读取数据,然后输出到另一个文件,这篇文章主要为大家详细介绍了Go语言读取文件的几种方法,希望对大家有所帮助
    2024-01-01
  • Golang异常处理之defer,panic,recover的使用详解

    Golang异常处理之defer,panic,recover的使用详解

    这篇文章主要为大家介绍了Go语言异常处理机制中defer、panic和recover三者的使用方法,文中示例代码讲解详细,需要的朋友可以参考下
    2022-05-05
  • 使用gRPC实现获取数据库版本

    使用gRPC实现获取数据库版本

    这篇文章主要为大家详细介绍了如何使用gRPC实现获取数据库版本,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12
  • golang Gorm框架讲解

    golang Gorm框架讲解

    gorm是一个使用Go语言编写的ORM框架,这篇文章主要介绍了golang Gorm框架,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12
  • Go语言struct类型介绍

    Go语言struct类型介绍

    这篇文章主要介绍了Go语言struct类型介绍,本文讲解了struct的2种声明方式,struct的匿名字段等内容,需要的朋友可以参考下
    2015-01-01

最新评论