gpt4 book ai didi

go - 速率限制功能 40/秒 "golang.org/x/time/rate"

转载 作者:IT王子 更新时间:2023-10-29 01:56:28 25 4
gpt4 key购买 nike

我正在尝试使用“golang.org/x/time/rate”构建一个函数,该函数会阻塞直到 token 可用。这是使用库将代码块限制为每秒 40 个请求的正确方法吗,桶大小为 2。

type Client struct {
limiter *rate.Limiter
ctx context.Context
}

func NewClient() *Client {
c :=Client{}
c.limiter = rate.NewLimiter(40, 2)
c.ctx = context.Background()
return &c
}

func (client *Client) RateLimitFunc() {

err := client.limiter.Wait(client.ctx)
if err != nil {
fmt.Printf("rate limit error: %v", err)
}
}

对我调用的代码块进行速率限制

RateLimitFunc()

我不想使用代码,因为我希望速率限制器考虑调用代码运行的时间长度。

最佳答案

在这里阅读文档; link

您可以看到 NewLimiter 的第一个参数是 rate.Limit 类型。

如果您想要 40 个请求/秒,那么这将转化为每 25 毫秒 1 个请求的速率。

您可以通过以下方式创建它:

limiter := rate.NewLimiter(rate.Every(25 * time.Millisecond), 2)

边注:

  • 在生成中,上下文ctx 不应存储在结构中,而应按请求存储。看起来 Client 将被重用,因此您可以将上下文传递给 RateLimitFunc() 或任何适当的地方,而不是在客户端结构上存储单个上下文。<

关于go - 速率限制功能 40/秒 "golang.org/x/time/rate",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54900121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com