我必须获取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()
这样的粗略错误之外),或者错误是否可能在其他地方?
答案 0 :(得分:0)
我找到了问题的答案。
有效的方法:
sleep(10)
,使程序等待10秒再处理下一个请求会话对象[...]将使用urllib3的连接池。因此,如果您要向同一主机发出多个请求,则基础TCP连接将被重用,这可以显着提高性能(请参阅HTTP持久连接)。
与我的初始代码相比,这不仅可以解决问题,而且可以提高性能。