我如何知道 RiotWatcher 何时遇到 429 错误?

How do I know when RiotWatcher encounters a 429 error?

我使用 RiotWatcher 通过 python 访问骚乱 API。由于我使用开发密钥进行了很多查询,因此我尝试注意 429 错误,指示超出允许的查询速率。

在做一些测试时,RiotWatcher 似乎包含一个自动 RetryAfter,这与 documentation 一致。如果超过限制,它会暂停并在查询可用时立即重新启动。

我尝试了文档中给出的以下示例,但它并没有像我想象的那样工作。

try:
        response = watcher.summoner.by_name(region, 'Poco')
    except ApiError as err:
        if err.response.status_code == 429:
            print('We should retry in {} seconds.'.format(err.headers['Retry-After']))
            print('this retry-after is handled by default by the RiotWatcher library')
            print('future requests wait until the retry-after time passes')
        elif err.response.status_code == 404:
            print('Summoner with that ridiculous name not found.')
        else:
            raise

在错误 429 上,请求暂停并在时间结束后继续,但我从未收到错误消息。

您知道是否可以知道 watcher 何时因 429 错误而暂停吗? 谢谢!

根据文档 https://riot-watcher.readthedocs.io/en/latest/riotwatcher/Riot/index.html 创建观察程序实例时,您可以指定要使用的速率限制器。它默认为 Handlers.RateLimit.BasicRateLimiter,所以你应该将它设置为你自己的子类,或者它也可以与 None 一起使用。默认速率限制器将拦截 429 错误并在您看不到错误的情况下进行重试。

探索 Riot Watcher 包代码,特别是 BasicRateLimiter.py 文件,我发现以下代码,第 49 行:

LOG.debug(
  "waiting for %s seconds due to %s limit...",
  to_wait.total_seconds(),
  wait_until[1],
         )

因此,要获取有关暂停以限制请求以及剩余时间的信息,只需查看日志中的 DEBUG 消息即可。