被限流时,最该做的不是继续重试,而是先把已经拿到的数据固定成可复核的快照。判断下一步动作的依据是:这批结果是否完整、是否可重现、是否能区分“限流造成的缺失”和“本来就没有数据”。
同一个脚本里,限流可能来自三个位置:接口返回错误码、脚本自身被平台判定为异常调用、或者中间队列积压导致超时。三种情况的保护策略不同。接口明确返回限流错误时,已有结果通常是完整的,只是后续批次缺失;超时或连接中断时,最后一批可能只写入一部分,需要按批次边界核对。
可区分的证据包括:错误码或错误文本、每个批次的开始与结束时间、写入记录数是否等于请求条数。如果错误文本是明确的频率限制提示,可以先把已完成批次标记为“可用”;如果只是超时,先不要标记完成,而是把最后一批单独隔离出来。
保护已有结果的关键动作是:在重试或换调用方式之前,把当前数据另存为一份只读快照,并记录它对应的请求参数、时间范围和批次号。不要在原表上继续追加,否则后续重试会污染既有数据,导致无法判断哪一条来自哪一次调用。
假设一次导出任务分十批,前六批成功、第七批返回限流错误。此时应把前六批复制到独立文件或独立表,命名中包含任务标识和截止时间,然后暂停脚本。这个动作的结果是:后续无论调整频率还是换时段重跑,都能拿这份快照与最终结果对比,确认缺失范围。
很多人遇到限流的第一反应是整批重跑,但这会浪费额度,也可能让原本成功的结果被覆盖。更稳妥的做法是先生成一份缺失清单:列出未完成的时间段、对象 ID 或批次号,只对这部分重新调用。
补调完成后,把新增结果与快照合并,并保留合并日志。这样即使再次被限流,也能从合并日志继续,而不是从头开始。
降低频率、增加间隔、分批错峰都是常见应对方式,但每次调整都应保留原参数,便于回退。具体做法是:把调用间隔、并发数、批次大小写成可配置项,修改前记录旧值。如果调整后仍然被限流,可以恢复到上一次可用的配置,而不是反复试错。
需要说明的是,请求量归零或抓取量突然下降,并不能单独证明限流已经解除。它也可能是上游数据源本身没有更新、查询条件写错、或者脚本提前退出。要区分这些解释,可以同时观察错误日志、响应状态和记录数三者是否一致。只有三者都恢复正常,才适合把该批次标记为完成。
限流不是一次性故障,而是需要预先设计的约束。下一次运行前,至少做到三点:每批写入后立即生成批次标记;任何重试都基于缺失清单而非全量;快照与合并日志分开存放。这样即使再次遇到限流,也能用已有结果支撑部分结论,而不是全部作废。
最后提醒一点:不同自动化营销软件的接口限制、返回格式和错误提示并不相同,具体额度、频率上限和重试规则需要以你所用工具的当前文档为准。上面这些动作不依赖某个特定品牌,核心是先固定结果、再定位缺失、最后有控制地补调。