def clean_data(response):
#do sth
return response
def extract_data(response):
# do some transforms
clean_response = clean_data(response)
yield clean_response
def fetch_paginated_data(first_url_of_paginated_response):
response = requests.get(first_url_of_paginated_response)
print(response.status_code)
response_object = response.json()
yield from extract_data(response_object)
if isinstance(response_object, dict) and \
'meta' in response_object and \
'next' in response_object['meta'] and \
response_object['meta']['next'] is not None:
yield from fetch_paginated_data(response_object['meta']['next'])
api_endpoint = "www.api.com/?filtered=True"
for data in fetch_paginated_data(api_endpoint):
insert_data_into_db()
pass
我正在使用生成器函数从 api 端点收集数据并将其插入本地数据库。对于单页响应,此脚本运行良好。然而,对于分页响应(30-50 页),随着迭代的结束,速度会减慢。我确实在执行期间(在调试模式下)在调用堆栈中看到了许多对 fetch_pagination_data 的递归调用。这是堆栈溢出问题吗?我该如何检查呢? RAM 在整个运行时保持不变。
我使用这个生成器方法在 api 和数据库任务之间交替,以有效地使用每个服务器上的资源。任何改进此过程的建议也将不胜感激。
发布的代码是正确的。我在开发中使用的代码包括每个“下一页”调用的初始 GET 请求参数。这显着减慢了 API 调用速度,导致函数速度减慢。