【发布时间】:2017-09-23 23:33:34
【问题描述】:
我使用overpy 来查询Overpass API,数据的性质使得我有很多查询要执行。我遇到了 429 OverpassTooManyRequests 异常,我正在尝试遵守规则。我尝试引入time.sleep 方法来分隔请求,但我没有关于程序在继续之前应该等待多长时间的依据。
我发现这个链接提到了“Retry-after”标题:
How to avoid HTTP error 429 (Too Many Requests) python
有没有办法在overpy 响应中访问该标头?我已经浏览了文档和源代码,但没有什么突出的可以让我访问该标题,因此我可以暂停查询,直到可以再次这样做。
我正在使用 Python 3.6 和 overpy 0.4。
【问题讨论】:
-
与其分隔请求,不如直接捕获
OverpassTooManyRequests异常,等待10 秒,然后再试一次?如果太早,那么它会再等 10 秒。 -
您需要评估 /api/status 调用的结果。顺便说一句:“很多查询”是多少?您知道使用限制吗?这就是您每天对所有用户的 10,000 次查询。这时候忘记“Retry-after”头了,它还没有实现,见github.com/drolbr/Overpass-API/issues/351
-
@mmd 大约有 450 个查询,但是,这不是一个会重复进行所有这些查询的脚本。查询只进行一次,结果将添加到 HTML 地图文件中,地图文件就是共享的内容。理想情况下,您会针对给定的数据集进行一次查询,而无需再次进行。所以唯一提出查询的用户是我。而且我知道每天 10,000 次的限制。
-
450 个查询听起来不算多,除非它们非常昂贵。其他库已经实现了评估 /api/status 的逻辑,如果您不介意,这里有一个 R 示例:github.com/hrbrmstr/overpass/blob/master/R/overpass_query.r
-
@mmd 我对 R 不熟悉(我知道它是什么,但从未使用过)。有没有办法在 Python 或 OverPy 中评估 /api/status?
标签: python overpass-api