gpt4 book ai didi

go - 使用 goroutine 处理退避

转载 作者:行者123 更新时间:2023-12-01 22:13:58 26 4
gpt4 key购买 nike

一个程序使用 N 个并发工作人员作为从 channel 消费数据的 goroutine 将数据发送到 API(生产者/消费者模式)。 API 表示它无法使用 HTTP 状态代码处理更多,并要求退避。

  • 在退避间隔过去之前,如何阻止所有工作人员?
  • 我把那些重试失败的请求放在哪里?

  • 非常感谢任何指向这个可能已经解决的问题的链接/指针!

    最佳答案

    您可以使用 select 来控制调用 API

    for _, k := range data {
    select {
    case <- backoff:
    time.Sleep(backoffDuration)
    default:
    // Call API
    // Check http status code and trigger backoff channel
    backoff <- 1
    }
    }

    这是设置:
  • 将相同的退避 channel 传递给所有 goroutine
  • 设置退避时间。这很棘手,因为所有 go 例程都应该能够设置此值,而所有其他例程都应该能够读取它。一种方法是使用闭包

  • 一旦设置了这两个,您就可以通过操纵退避 channel 和退避持续时间来控制 API 调用,以控制例程暂停工作的时间。

    免责声明:这只是伪代码。

    您可以查看 Hashicorp 的图书馆 here .看起来它会解决你的问题

    关于go - 使用 goroutine 处理退避,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61743276/

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