为什么生成器函数在长时间迭代过程中会变慢

问题描述 投票:0回答:1
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 和数据库任务之间交替,以有效地使用每个服务器上的资源。任何改进此过程的建议也将不胜感激。

python networking generator
1个回答
0
投票

发布的代码是正确的。我在开发中使用的代码包括每个“下一页”调用的初始 GET 请求参数。这显着减慢了 API 调用速度,导致函数速度减慢。

© www.soinside.com 2019 - 2024. All rights reserved.