先给有条件的结论:如果限流只发生在“继续取新数据”这一步,而已经返回的结果已经落盘并带有稳定的任务标识,那么优先动作是停止重试、冻结这批结果、把未完成部分单独排队;如果限流同时发生在写回或更新状态这一步,已有结果可能被下一次覆盖,这时应先做只读导出,再决定是否继续。判断依据不是限流提示本身,而是你的脚本把“取数”和“写状态”放在同一个事务里,还是分成两个可恢复的步骤。
脚本调用自动化宣传软件时,限流可能出现在两个位置。第一种是读取接口或任务列表时被限,已有结果通常还留在本地缓存或上次导出的文件里,风险较低。第二种是写回工具、更新任务状态或上传素材时被限,风险高得多:因为脚本往往在写回成功后才标记“已完成”,一旦写回失败又重跑,可能把旧结果当成新结果再次提交,或者让同一批内容出现重复状态。
可区分的证据是看脚本日志里最后一次成功动作的类型。如果最后成功的是“读取”或“拉取”,已有结果基本安全;如果最后成功的是“写入”或“状态更新”,就要先确认目标端是否已经部分生效。不要仅凭错误码判断,同一种限流提示在读取和写入场景下的后果完全不同。
在确认限流后,建议按下面顺序处理,而不是直接加重试次数:
这些动作的结果会直接影响下一步:如果导出和断点都完整,恢复后可以只补未完成部分;如果断点缺失,就只能整批重跑,而整批重跑在写回场景下可能造成重复,需要先人工核对。
有一种反例会让上面的结论失效:当已有结果依赖临时令牌、短期缓存或会话状态,而限流恢复后这些状态已经过期。此时“先停再补”可能导致已有结果无法继续使用,只能重新获取。判断条件是看结果本身是否带有有效期,以及脚本是否把结果和临时凭证绑定在一起。如果绑定在一起,优先动作应改为在限流期间尽快把结果转存为不依赖临时状态的形式,再停止调用。
另一个需要警惕的情况是:限流发生在批量写回的中途,而目标端没有幂等标识。此时即使你保留了已有结果,恢复后补写也可能产生重复条目。这时应先导出目标端当前状态,与本地结果做一次比对,再决定补写范围。
假设一个脚本从自动化宣传软件拉取一批内容,每拉取一条就写回一个状态字段。运行到第 40 条时读取接口被限流。此时本地已有 39 条结果,断点清晰,写回也已完成。按“先停再补”处理,恢复后从第 40 条继续,已有结果不受影响。
换一个假设:脚本在第 40 条写回状态时被限流,而写回接口没有幂等标识。此时本地虽然有 39 条结果,但目标端可能只写入了 38 条或 40 条。正确动作是先只读导出目标端状态,与本地结果比对,确认差异后再补写。这个例子的数字只用于说明比较方法,不代表任何工具的实际限额。
限流恢复后,不要立刻整批继续。先取一小段未完成数据,验证读取和写回是否都正常,并确认写回不会产生重复。验证通过后,再从断点继续。如果验证发现写回仍有重复风险,就改为只导出结果、暂不写回,等确认幂等方案后再处理。这样做的结果是,你能把“保护已有结果”和“继续获取新结果”分开决策,而不是让一次限流同时毁掉两件事。