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
    }
  • 相关阅读:
    socket入门教程
    线程间操作无效: 从不是创建控件“xxxxxxxx”的线程访问它。
    Socket教程
    Windows 2008 R2防火墙,允许被ping
    Miller_rabin算法+Pollard_rho算法 POJ 1811 Prime Test
    Pollard rho算法+Miller Rabin算法 BZOJ 3668 Rabin-Miller算法
    Miller-Rabin算法 codevs 1702 素数判定 2
    快速幂 cojs 1130. 取余运算
    中国剩余定理 hdu 3579
    中国剩余定理 hdu 1573 X问题
  • 原文地址:https://www.cnblogs.com/cheyunhua/p/15618258.html
Copyright © 2011-2022 走看看