我使用RiotWatcher通过python访问riot API。由于我使用开发密钥进行了大量查询,所以我会注意429个错误,这些错误表明超出了允许的查询率。
在进行一些测试时,RiotWatcher似乎包含了一个自动RetryAfter,这与文档一致。如果超过了限制,它会在查询可用时暂停并重新启动。
我尝试了文档中给出的以下示例,但它并不像我想象的那样起作用。
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时,请求会暂停并在经过一段时间后继续,但我从未收到错误消息。
你知道是否有可能知道观察者何时因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消息即可。