Python处理10万+行数据集:分阶段带延迟调用API方案咨询
针对10万+行数据集的双阶段API并行处理方案
核心思路
不用等第一阶段全量完成,让两个阶段部分并行:第一阶段持续生成响应ID,10分钟后第二阶段启动,实时消费已生成的ID发起状态查询。以下是具体实现方向:
1. 异步任务队列调度(适合高并发场景)
- 把第一阶段的每行API请求拆成独立任务,放入异步队列(比如Python的
Celery/RQ、Node.js的BullMQ),用多Worker并行执行,拿到响应ID后实时写入临时存储(Redis、内存缓存表或本地SQLite表)。 - 启动第一阶段后,设置10分钟定时器,时间到后启动第二阶段的任务队列:从临时存储批量读取未处理的响应ID,拆成检查任务放入第二个队列,同样用多Worker并行调用状态API。
- 两个队列持续运行,直到第一阶段任务全部完成,且第二阶段把所有ID的状态查询完毕。务必给每个ID加去重标记(比如Redis集合记录已检查ID),避免重复请求。
2. 分批次+定时扫描(轻量易实现)
- 将数据集拆成小批次(比如每1000行一批),第一阶段按批次顺序调用API,每完成一批就把响应ID写入CSV/Google Sheet的第三列(或单独的状态跟踪表)。
- 写独立的后台脚本:启动后先休眠10分钟,之后每隔固定时间(比如1分钟)扫描已填充的响应ID列,收集未查询过的ID,批量发起状态检查API,把结果写入第四列。
- 技术工具:Python用
schedule库做定时,Linux用cron触发脚本;Google Sheet直接用Apps Script的时间驱动触发器实现定时扫描。
3. 流式处理+实时消费(超大数据集友好)
- 处理CSV时用
csv.reader流式读取,边读边发起第一阶段API请求,拿到响应ID后立刻写入可实时读取的存储(比如Redis列表、临时CSV文件)。 - 第二阶段用独立进程,启动后先等待10分钟,之后持续监听存储的新增数据:一旦有新ID加入,就发起状态检查请求。
- 优势:无需一次性加载10万+行到内存,避免内存溢出,适合超大规模数据集。
关键注意事项
- API限流控制:两个阶段都要加并发限制(比如Python用
tenacity、Node.js用p-limit),避免触发API服务商的限流机制导致封禁。 - 异常重试:给API请求加重试逻辑,处理网络波动、超时等异常,保证数据完整性。
- 状态持久化:必须记录已检查的ID,比如在CSV/Sheet加“已检查”标记列,或用Redis集合存已处理ID,防止重复请求。
- Google Sheet特殊处理:因Google API有配额限制,第一阶段请求需加
Utilities.sleep()控制间隔;第二阶段用时间触发器时,单次批量请求不要超过API配额上限。
内容的提问来源于stack exchange,提问作者MikG
相关产品推荐
相关产品推荐

