zoukankan      html  css  js  c++  java
  • Go 语言中的两个定时任务库

    今天给大家介绍两个 Go 语言可以用来做定时任务的库,直接上 demo 就好啦。

     1. robfig/cron

    执行如下命令进行安装:

    go get -u github.com/robfig/cron

    每分钟执行一次:

    package main

    import (
        "log"

        "github.com/robfig/cron"
    )

    func main() {
        i := 0
        c := cron.New()
        spec := "0 */1 * * * *"
        c.AddFunc(spec, func() {
            i++
            log.Println("execute per second", i)
        })
        c.Start()
        select {}
    }

    其中注意select的用法:
    golang 的 select 的功能和 select, poll, epoll 相似, 就是监听 IO 操作,当 IO 操作发生时,触发相应的动作。

    每天上午9点到12点的第2和第10分钟执行:

    package main

    import (
        "fmt"

        "github.com/robfig/cron"
    )

    func main() {
        spec := "2,10 9-12 * * *" // 每天上午9点到12点的第2和第10分钟执行
        c := cron.New()
        c.AddFunc(spec, myFunc)
        c.Start()
        select {}
    }

    func myFunc() {
        fmt.Println("execute")
    }

    2.  jasonlvhit/gocron

    执行如下命令进行安装:

    go get -u github.com/jasonlvhit/gocron

    每隔1秒执行一个任务,每隔4秒执行另一个任务:

    package main

    import (
        "fmt"
        "time"

        "github.com/jasonlvhit/gocron"
    )

    func task() {
        fmt.Println("I am runnning task.", time.Now())
    }
    func superWang() {
        fmt.Println("I am runnning superWang.", time.Now())
    }

    func main() {
        s := gocron.NewScheduler()
        s.Every(1).Seconds().Do(task)
        s.Every(4).Seconds().Do(superWang)

        sc := s.Start() // keep the channel
        go test(s, sc)  // wait
        <-sc            // it will happens if the channel is closed
    }

    func test(s *gocron.Scheduler, sc chan bool) {
        time.Sleep(8 * time.Second)
        s.Remove(task) //remove task
        time.Sleep(8 * time.Second)
        s.Clear()
        fmt.Println("All task removed")
        close(sc) // close the channel
    }
  • 相关阅读:
    敏捷开发系列学习总结(5)——这几招搞定团队协同Coding
    敏捷开发系列学习总结(4)—Git管理工具sourcetree的安装
    Java基础学习总结(74)——Java常见笔试题及答案汇总
    iOS 极光推送
    iOS UI控件没有显示时的调试技巧
    iOS 搜索之拼音搜索
    iOS MJExtension框架之字典数组转模型数组
    iOS 单例
    iOS 切换键盘
    iOS 正则表达式
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15618258.html
Copyright © 2011-2022 走看看