剛開始了解戈魯丁的力量。我有大約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 關注
- 95 瀏覽
添加回答
舉報
0/150
提交
取消