golang频率限制 rate

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010066807/article/details/79961957

golang.org/x/time/rate 提对速度进行限制的算法

l := rate.NewLimiter(1, 3) // 一个参数为每秒发生多少次事件,第二个参数是最大可运行多少个事件(burst)

Limter提供三中主要的函数 Allow, Reserve, Wait. 大部分时候使用Wait

Wait/WaitN 当没有可用事件时,将阻塞等待

c, _ := context.WithCancel(context.TODO())
for {
    l.Wait(c)
    fmt.Println(time.Now().Format("04:05.000"))
}
输出
07:35.055
07:35.055
07:35.055
07:36.060
07:37.059
07:38.059
缓存3次后,每秒执行一次

Allow/AllowN 当没有可用事件时,返回false

for {
    if (l.AllowN(time.Now(), 1)) {
        fmt.Println(time.Now().Format("04:05.000"))
    } else {
        time.Sleep(1 * time.Second / 10)
        fmt.Println(time.Now().Format("Second 04:05.000"))
    }

}

Reserve/ReserveN 当没有可用事件时,返回 Reservation,和要等待多久才能获得足够的事件

for {
        r := l.ReserveN(time.Now(), 1)
        s := r.Delay()
        time.Sleep(s)
            fmt.Println(s, time.Now().Format("04:05.000"))

    }
阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页