【问题标题】:How to Retry 429 Errors On Scroll如何在滚动时重试 429 错误
【发布时间】:2021-09-28 01:56:55
【问题描述】:

我正在为 python 使用 elasticsearch dsl 库。我在这样的线程应用程序中运行滚动扫描:

s = Search\
    .from_dict(query)\
    .using(es)\
    .index(index)\
    .doc_type(doc_type)\
    .extra(slice=slice)

for hit in s.scan():
    yield hit

可以有 32 个线程都运行在具有不同切片的同一滚动上。有时这会遇到429 Too Many Requests 错误,它会杀死整个过程。令人心碎的是,这可能会在卷轴开始 1 小时后发生,而这个过程只需要重新开始。

如何从 429 Too Many Requests 错误中恢复?是否可以在不重新启动整个滚动的情况下在最后一个滚动偏移处重试?

【问题讨论】:

    标签: python elasticsearch


    【解决方案1】:

    使用retry 库。我有一个自定义的 TooManyRequestsError 只能捕获 429s

    @retry(TooManyRequestsError, delay=3, jitter=3, max_delay=30)
    def get(url: str) -> requests.Response:
        res = requests.get(url)
        if res.status_code == 429:
            logger.warning(f'Too many requests! {url}')
            raise TooManyRequestsError()
        res.raise_for_status()
        return res
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-30
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2021-05-18
      相关资源
      最近更新 更多