请求过多 超过限制错误

8
我正在使用overpy查询Overpass API,由于数据的特性,需要执行大量的查询。我遇到了429 OverpassTooManyRequests异常,并尝试遵守规则。我尝试使用time.sleep方法来分隔请求,但我不知道程序在继续之前应该等待多长时间。
我找到了这个链接,其中提到了“Retry-after”头:
如何避免HTTP错误429(太多请求)python 有没有办法在overpy响应中访问该头?我已经查阅了文档和源代码,但没有任何明显的内容可以让我访问该头,以便在可以再次进行查询之前暂停查询。
我使用Python 3.6和overpy 0.4。

1
不如捕获 OverpassTooManyRequests 异常,等待 10 秒钟,然后再次尝试,而不是将请求间隔开。如果时间还为到,那么它就会再等待 10 秒钟。 - Peter
您需要评估/api/status调用的结果。顺便问一下,“很多查询”是多少?您是否了解使用限制?每天所有用户的查询次数为10,000次。暂时不要考虑“Retry-after”头,因为它尚未实现,请参见https://github.com/drolbr/Overpass-API/issues/351。 - mmd
@mmd 大约有450个查询,但这不是一个会重复进行所有这些查询的脚本。查询只进行一次,结果将添加到HTML地图文件中,而地图文件是被共享的内容。理想情况下,您可以为给定的数据集仅进行一次查询,以后就不必再进行了。因此,唯一进行查询的用户是我。我知道每天的限制是10,000次。 - Chris M.
450个查询听起来不算太多,除非它们非常昂贵。其他库已经实现了评估/api/status的逻辑,这里有一个R的示例,如果您不介意的话:https://github.com/hrbrmstr/overpass/blob/master/R/overpass_query.r - mmd
@mmd 我不熟悉 R(我知道它是什么,但从未使用过)。在 Python 或 OverPy 中是否有一种评估 /api/status 的方法? - Chris M.
显示剩余3条评论
3个回答

4

1

2
当我点击链接 http://overpass-api.de/api/kill_my_queries 时,我得到了一个空白页面。这正常吗? - Chris M.
是的,这意味着没有查询被终止。 - mmd

1

在确认没有运行失控的查询之后,我采纳了Peter的建议,并添加了一个捕获TooManyRequests异常的方法,等待30秒后重试。这似乎是一个立即可行的解决方案。

我还将向OverPy的原始作者提出问题,建议增加评估/api/status的功能,根据mmd的建议。


一旦您在OverPy上提出问题,请在此处也发布一个链接。谢谢。 - mmd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接