【问题标题】:TooManyRequests Overpass ErrorTooManyRequests 越界错误
【发布时间】: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


【解决方案1】:

也许这不是您正在寻找的答案,但我遇到了同样的问题并通过简单地使用 docker 托管我自己的 OSM 数据库服务器来解决它。只需克隆 repo 并按照说明操作:

https://github.com/mediasuitenz/docker-overpass-api

【讨论】:

    【解决方案2】:

    来自http://overpass-api.de/command_line.html 请检查您是否有一个占用所有资源的“失控”请求。

    【讨论】:

    【解决方案3】:

    在确认我没有失控的查询后,我接受了 Peter 的建议,并为等待 30 秒并重试的 TooManyRequests 异常添加了一个捕获。这似乎是一个立竿见影的解决方案。

    我还将向 OverPy 的发起者提出一个问题,建议根据 mmd 的建议进行增强以允许评估 /api/status。

    【讨论】:

    • 一旦你提出了关于 OverPy 的问题,你能否也在这里发布一个链接。谢谢。
    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2014-06-06
    • 2012-02-26
    • 2015-03-22
    • 1970-01-01
    相关资源
    最近更新 更多