2

我正在使用 requests 模块来查询一个相对较大的 PostgRES 数据库(约 14 GB),该数据库可通过 PostgREST API 访问,托管在由对等方设置的简单服务器上。

当我进行简单的 API 调用时,例如

requests.get('https://api.nycdb.info/real_property_legals?bbl=eq.4043210050')

我收到 200 条回复,一切正常。但是,当我进行更多计算密集型搜索(例如文本搜索)时,绝大多数时间我都会收到 504 个响应。

这是一个几乎总是返回 504 超时的 API 调用示例:

requests.get('https://api.nycdb.info/real_property_parties?address1=@@."MADISON"')

我怀疑这是因为服务器响应速度不够快,因为它的处理能力很简单,而且数据库很大。但是,我在这里向社区寻求帮助。

有没有办法增加请求在提供 504 响应之前等待响应的时间?我还能做些什么来尝试提高更复杂查询的可靠性?

4

2 回答 2

2

您可以添加 ,timeout= 其中 seconds 是浮点数。(有关可以直接提供给 pydoc.get() 的可用选项,请参阅 pydoc requests.request。)在快速情况下,您可能需要将查询分解为一口大小的块,API 服务器端也可能存在限制。

于 2017-08-11T20:24:10.727 回答
1

如果您阅读请求的文档,您将看到 requests.get 默认情况下不会超时。

此外,504 是网关服务器产生的错误。

因此,实际发生的情况是您的 PostGREST 服务器与您的 postgres 服务器的通信超时。

您无法通过更改 request.get 调用来阻止这种情况,您必须重新配置您的一个或两个服务器。

(换句话说,这不是 python 或请求问题)

于 2017-08-11T20:30:18.603 回答