世界热点评!Golang cron 定时器和定时任务的使用场景
【资料图】
目录
Golang cron 定时器和定时任务timer和ticker的区别TimerTickercron 定时任务参考链接:Golang cron 定时器和定时任务
Golang中time包有两个定时器,分别为 ticker 和 timer。两者都可以实现定时功能,但各自都有自己的使用场景。
timer和ticker的区别
ticker定时器表示每隔一段时间就执行一次,一般可执行多次。timer定时器表示在一段时间后执行,默认情况下只执行一次,如果想再次执行的话,每次都需要调用 time.Reset() 方法,此时效果类似ticker定时器。同时也可以调用 Stop() 方法取消定时器timer定时器比ticker定时器多一个 Reset() 方法,两者都有 Stop() 方法,表示停止定时器,底层都调用了stopTimer() 函数。Timer
Timer是一个定时器。代表未来的一个单一事件,你可以告诉timer你要等待多长时间。
package main import ( "fmt" "time" ) func main() { //设置定时器为3秒 timer := time.NewTimer(3 * time.Second) fmt.Println("当前时间为:", time.Now()) t := <-timer.C //从定时器拿数据 fmt.Println("当前时间为:", t) }
Ticker
Ticker是一个周期触发定时的计时器,它会按照一个时间间隔往channel发送系统当前时间,而channel的接收者可以以固定的时间间隔从channel中读取事件。
Ticker是一个定时触发的计时器,
它会以一个间隔(interval)往channel发送一个事件(当前时间),
而channel的接收者可以以固定的时间间隔从channel中读取事件。
package main import ( "fmt" "time" ) func main() { //创建一个周期性的定时器 ticker := time.NewTicker(3 * time.Second) fmt.Println("当前时间为:", time.Now()) go func() { for { //从定时器中获取数据 t := <-ticker.C fmt.Println("当前时间为:", t) } }() for { time.Sleep(time.Second * 1) } }
cron 定时任务
package main import ( "github.com/robfig/cron" "log" "time" ) func main() { //cron1() //cron2() cron3() select { } } func cron1() { log.Println("Starting...") c := cron.New() c.AddFunc("* * * * * *", func() { log.Println("Run models.CleanAllTag...") }) c.AddFunc("* * * * * *", func() { log.Println("Run models.CleanAllArticle...") }) c.Start() t1 := time.NewTimer(time.Second * 10) for { select { case <-t1.C: t1.Reset(time.Second * 10) } } } func cron2() { log.Println("Starting...") c := cron.New() // 新建一个定时任务对象 c.AddFunc("* * * * * *", func() { log.Println("hello world") }) // 给对象增加定时任务 c.Start() //select { //} time.Sleep(10 * time.Second) c.Stop() } func cron3() { log.Println("Starting...") c := cron.New() h := Hello{"I Love You!"} // 添加定时任务 c.AddJob("*/2 * * * * *", h) // 添加定时任务 5秒执行一次 c.AddFunc("*/5 * * * * *", func() { log.Println("hello word") }) s, err := cron.Parse("*/3 * * * * *") if err != nil { log.Println("Parse error") } h2 := Hello{"I Hate You!"} c.Schedule(s, h2) // 其中任务 c.Start() // 关闭任务 defer c.Stop() } type Hello struct { Str string } func(h Hello) Run() { log.Println(h.Str) }
参考链接:
https://blog.haohtml.com/archives/19859
https://studygolang.com/articles/17624
https://www.jianshu.com/p/fd3dda663953
https://blog.51cto.com/u_13914991/2294357
https://www.cnblogs.com/yinzhengjie/p/12244385.html
http://t.zoukankan.com/yinzhengjie-p-12245289.html
https://blog.51cto.com/u_13914991/2294357
到此这篇关于Golang cron 定时器和定时任务的文章就介绍到这了,更多相关Golang cron 定时任务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
X 关闭
X 关闭
- 15G资费不大降!三大运营商谁提供的5G网速最快?中国信通院给出答案
- 2联想拯救者Y70发布最新预告:售价2970元起 迄今最便宜的骁龙8+旗舰
- 3亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 4现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 5如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 6AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 7转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 8充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 9好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 10名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?