【go 定时调度框架】你知道几种go语言定时调度框架?

news/2024/11/29 8:45:38/

Go语言中有很多类似Python apscheduler 的定时调度框架,其中比较流行的有以下几个:

  • cron:
    一个基于Cron表达式的定时任务库,可以精确到秒级。它提供了简单易用的API来定义和管理定时任务,支持任务暂停、恢复、删除等操作,同时还能够在多个节点之间共享状态信息。
    官方网站:https://pkg.go.dev/github.com/robfig/cron
  • go-crontab:
    一个轻量级的定时调度库,也是基于Cron表达式的。它支持多种调度方式,包括分布式调度、集群调度,同时还提供了Web控制台和RESTful
    API接口,非常方便使用。 官方网站:https://github.com/lisijie/go-crontab
  • jobrunner:
    一个简单易用的定时任务库,它支持按照时间周期或按照固定时间点执行任务。除此之外,还支持异步任务、任务重试、延迟任务等功能。
    官方网站:https://github.com/bamzi/jobrunner
  • gocron: 另一个基于Cron表达式的定时任务库,它可以让你以链式调用的方式定义任务,并且支持任务组、任务优先级等功能。
    官方网站:https://pkg.go.dev/github.com/go-co-op/gocron

这些库使用起来都比较简单,你可以根据自己的需求和喜好选择其中一个来使用。因为每个定时框架都有其自身的优点和适用场景。以下是每个框架的一些特点供您参考:

1、cron
得到广泛的使用和测试。
评测结果表明,与其他相比,它拥有最高的调度准确性,尤其在较高负载下。
它也有宽松的开源许可证,允许你做任何你想做的事情。
2、go-crontab
可以运行多个实例(master/slave)并支持分布式部署。
易于集成,并提供了控制台和API接口。
在Go语言中编写,易于维护和扩展。
3、jobrunner
拥有丰富的功能,包括异步任务、任务重试、延迟任务等。
具有充分的单元测试和文档支持。
代码简单而直观。
4、gocron
支持链式调用,非常易于使用。
可以定义任务组、任务优先级等。
在调度方面表现良好,但没有经过广泛测试。

总结:因此,选择哪个库主要取决于您的需求和偏好。如果你需要更高的调度准确性和稳定性,那么cron可能是一个不错的选择;如果你需要分布式调度和控制台支持,那么go-crontab可能更适合你。而如果你需要更多的功能和灵活性,那么jobrunner可能更适合你。

下面用go语言cron定时任务库写一个例子,每分钟输出hello,world

package mainimport ("fmt""time""github.com/robfig/cron"
)func main() {c := cron.New()c.AddFunc("*/60 * * * *", func() { // 每分钟执行一次fmt.Println("hello, world")})c.Start()// 运行 5 分钟后停止time.Sleep(5 * time.Minute)c.Stop()
}

在这个例子中,我们首先创建了一个 cron.Cron 实例,并使用 AddFunc() 方法添加了一个定时任务。该方法接受两个参数:时间表达式和要执行的函数。在本例中,我们使用 */60 * * * * 表示每分钟都会执行一次。

最后,我们使用 Start() 方法启动定时器并等待 5 分钟后停止它。在每次运行时,程序将输出 “hello, world”。


http://www.ppmy.cn/news/39194.html

相关文章

FFmpeg添加字幕的详细操作

FFmpeg添加字幕的详细操作 在视频中添加字幕可以使视频更具可读性,并为观众提供更好的观看体验,这在多语种内容中尤为重要。FFmpeg是一个流行的开源视频处理工具,它可以被用来给视频添加字幕。本文将介绍FFmpeg集成libass的编译流程&#xf…

2023年第四届世界蜂疗大会将于7月25日至27日在重庆武隆举办

【39蜂疗网】记者 讯 从世界蜂疗大会智库专家筹备会上获悉,2023年第四届世界蜂疗大会将于7月25日至27日在重庆武隆举办;本次大会以“加速推进新时代蜂疗事业高质量发展”为主题,将深刻把握全球中医蜂疗产业发展趋势。将对后疫情时代蜂疗行业高…

Python3 os.mkdir() 方法、Python3 os.tcgetpgrp() 方法

Python3 os.mkdir() 方法 概述 os.mkdir() 方法用于以数字权限模式创建目录。默认的模式为 0777 (八进制)。 语法 mkdir()方法语法格式如下: os.mkdir(path[, mode])参数 path -- 要创建的目录 mode -- 要为目录设置的权限数字模式 返回值 该方法没有返回值。…

Linux复习 / 进程控制QA梳理

文章目录前言Q&A进程终止Q:exit和_exit的区别?Q:内核是如何终止进程的?进程等待Q:为什么要等待子进程?Q:如何等待子进程(wait/waitpid的区别)?进程替换Q&…

基于模型预测控制(MPC)的微电网调度优化的研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

Vue插槽理解

Vue插槽理解插槽插槽 slot又名插槽,vue内容分发机制,组件内部的模板引擎使用slot元素作为承载分发内容的出口 插槽slot是子组件的一个模板标签元素,而这一个元素是否显示,以及怎么显示是由父组件决定的 slot分为三类:默…

Leetcode.559 N 叉树的最大深度

题目链接 Leetcode.559 N 叉树的最大深度 easy 题目描述 给定一个 N 叉树,找到其最大深度。 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 N 叉树输入按层序遍历序列化表示,每组子节点由空值分隔(请参见示例)。…

ubuntu的neo4j启动问题

一、权限 首先赋予改文件可执行权限,赋予完会从白色变成绿色。 cd neo4j/bin目录下 sudo chmod x neo4j 二、sudo找不到java的问题 java -version正常但是sudo java -version不正常。 要么将jdk的path加入到secure_path 要么干脆直接注释掉 sudo visudo #注意&#…