刚开始了解戈鲁丁的力量。我有大约100个帐户和大约10个区域,循环浏览它们以创建~1000个goroutine,以提高阅读速度。它工作得太快了,以至于达到了20 /秒的API返回限制。如何确保所有戈鲁丁都能保持在 (20/s) 的最大呼叫速率?我不确定哪种 golang 并发方法最适合一起处理错误。例如:func readInstance(acc string, region string, wg *sync.WaitGroup) { defer wg.Done() response, err := client.DescribeInstances(acc, region) if err != nil { log.Println(err) // API limit exceeding 20 return } . . . .}func main() { accounts := []string{"g", "h", "i", ...} regions := []string{"g", "h", "i", ...} for _, region := range regions { for i := 0; i < len(accounts); i++ { wg.Add(1) go readInstance(accounts[i], region, &wg) } } wg.Wait()}
2 回答
噜噜哒
TA贡献1784条经验 获得超7个赞
我想你可以试试这个:https://github.com/uber-go/ratelimit
根据文档,它是并发安全的。
import (
"fmt"
"time"
"go.uber.org/ratelimit"
)
func main() {
rl := ratelimit.New(100) // per second
prev := time.Now()
for i := 0; i < 10; i++ {
now := rl.Take()
fmt.Println(i, now.Sub(prev))
prev = now
}
// Output:
// 0 0
// 1 10ms
// 2 10ms
// 3 10ms
// 4 10ms
// 5 10ms
// 6 10ms
// 7 10ms
// 8 10ms
// 9 10ms
}
- 2 回答
- 0 关注
- 77 浏览
添加回答
举报
0/150
提交
取消