当前位置: 首页 > article >正文

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

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 main

import (
	"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.kler.cn/a/9311.html

相关文章:

  • 人工智能中的移动端编程
  • OLAP引擎—ClickHouse常规优化
  • 阿里云版GPT官宣,我们问了它10个问题
  • 网络编程之输入ip地址解析不出来域名
  • dijkstra算法 java 优先队列 路径记录
  • Meetup 回顾|Data Infra 研究社第十期(含资料发布)
  • 改进YOLO系列:将ConvNextV2结合YoloV8、YOLOv7、YOLOv5,(纯卷积|超越Swin)
  • html语义化标签和无语义化标签
  • 腾讯云轻量应用服务器16核32G28M处理器带宽流量性能测评
  • 系统集成项目管理工程师案例分析考点汇总(成本、质量、人力)
  • 「解析」Matplotlib 绘制折线图
  • 在线Plist文件格式转Json文件格式
  • 77-Linux_网络编程
  • 二 、Locust自定义用户(场景)
  • shell 脚本编写
  • uniapp - 实现车牌号键盘与格子间隔显示组件,汽车牌照录入支持自定义样式、新能源等(附带组件完整源码,开箱即用,稍微改改就能用)
  • ReRes 谷歌浏览器插件使用
  • JavaSE基础(27) 数组
  • [深层次分析]Thinkphp项目 mysql连接报 SQLSTATE[HY000] [2006] MySQL server has gone away
  • MySQL存储引擎