等待获取请求的完成

时间:2019-06-20 20:09:51

标签: python python-requests

我必须获取JSON API的几页,其中包含约130'000个条目。

该请求非常简单:

response = requests.request("GET", url, headers=headers, params=querystring)

查询字符串是访问令牌,标头相当简单。

我创建了一个while循环,其中基本上每个请求url都是

的形式
https://urlprovider.com/endpointname?pageSize=10000&rowStart=0

,rowStart按pageSize递增,直到没有其他页面为止。

大约5-8个成功的请求后,我遇到的问题是以下响应:

{'errorCode': 'ERROR_XXX', 'code': 503, 'message': 'Maximum limit for unprocessed API requests have been reached. Please try again later.', 'success': False}

从错误消息中我得到我在上一个请求完成之前启动下一个请求。有谁知道我如何确保下一个请求开始之前get请求已经完成(除了像sleep()这样的粗略错误之外),或者错误是否可能在其他地方?

1 个答案:

答案 0 :(得分:0)

我找到了问题的答案。

  1. 请求是同步的,这意味着它将一直等到呼叫结束后再继续
  2. API提供程序的响应具有误导性,因为该请求已在下一个请求到达之前进行了处理。
  3. 很难评估根本原因,但这可能与API提供者施加的限制有关

有效的方法:

  • 粗略的sleep(10),使程序等待10秒再处理下一个请求
  • 更好的解决方案:创建一个Session。根据文档:
  

会话对象[...]将使用urllib3的连接池。因此,如果您要向同一主机发出多个请求,则基础TCP连接将被重用,这可以显着提高性能(请参阅HTTP持久连接)。

与我的初始代码相比,这不仅可以解决问题,而且可以提高性能。