You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用requests-futures如何实现无固定范围的持续查询直到无数据返回?

基于requests-futures动态拉取全部分页数据的实现方案

核心思路是维护一个动态更新的异步请求集合,每次处理完已返回的分页响应时,根据返回的分页标识判断是否存在下一页,存在则即时生成新的分页请求加入待处理集合,直到所有分页拉取完成。

完整实现代码

from concurrent.futures import as_completed
from pprint import pprint
from requests_futures.sessions import FuturesSession

# 初始化会话,可通过max_workers控制最大并发数
session = FuturesSession(max_workers=3)
# 存储所有待处理/处理中的异步请求
futures = set()
# 存储拉取到的所有分页数据
all_data = []

# 先提交第一页的请求,分页参数名根据实际接口调整
first_page = 1
futures.add(session.get('http://your-api-url/path', params={'page': first_page}))

while futures:
    for future in as_completed(futures):
        # 先把已完成的future从集合中移除
        futures.remove(future)
        try:
            resp = future.result()
            resp.raise_for_status()
            result = resp.json()
            current_page = resp.request.params['page']
            
            # 处理当前页数据
            pprint({
                'page': current_page,
                'url': resp.request.url,
                'content': result
            })
            all_data.extend(result.get('data_list', []))
            
            # 判断是否存在下一页,这里的判断逻辑根据接口实际返回调整
            # 示例1:接口返回has_next字段标识是否有下一页
            has_next = result.get('has_next', False)
            # 示例2:接口返回总页数total_pages,和当前页对比
            # has_next = current_page < result.get('total_pages', 0)
            # 示例3:接口返回下一页地址next_url,判断是否不为空
            # next_url = result.get('next_url')
            # has_next = bool(next_url)
            
            if has_next:
                next_page = current_page + 1
                # 提交下一页请求,加入集合
                futures.add(session.get('http://your-api-url/path', params={'page': next_page}))
        except Exception as e:
            print(f'请求处理失败,错误信息:{e}')
            # 可根据需求在此处添加重试逻辑,把失败的请求重新加入futures集合

关键说明

  • 用动态可变的set存储请求任务,替代预先生成所有请求的写法,适配未知总页数的场景
  • 分页判断逻辑可根据实际接口规则灵活调整,无需固定写法
  • 初始化FuturesSession时可通过max_workers参数限制最大并发数,避免请求频率过高触发接口限流
  • 可根据业务需求添加超时设置、失败重试、数据去重等逻辑,提升运行稳定性

内容的提问来源于stack exchange,提问作者user2896120

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:36:05