影刀RPA 网络超时与重试策略打造高可用的自动化流程作者林焱网络请求是RPA流程中最不稳定的环节——超时、断连、DNS解析失败、服务器500错误……这些问题不是会不会发生而是什么时候发生。唯一正确的态度是默认网络不可靠做好重试和降级。基础重试模板importrequestsimporttimedefrequest_with_retry(url,max_retries3,**kwargs):带重试的HTTP请求forattemptinrange(max_retries):try:resprequests.get(url,timeout10,**kwargs)# 服务器错误重试ifresp.status_code500:print(f服务器错误({resp.status_code})第{attempt1}次重试...)time.sleep(2**attempt)# 指数退避continue# 限速重试但要等更久ifresp.status_code429:retry_afterint(resp.headers.get(Retry-After,5))print(f被限速等待{retry_after}秒...)time.sleep(retry_after)continuereturnresp# 成功或客户端错误exceptrequests.exceptions.Timeout:print(f超时第{attempt1}次重试...)time.sleep(2**attempt)exceptrequests.exceptions.ConnectionError:print(f连接失败第{attempt1}次重试...)time.sleep(3)# 连接问题等一下再试exceptExceptionase:print(f未知错误:{e})ifattemptmax_retries-1:raise# 最后一次抛出异常raiseException(f请求失败已重试{max_retries}次:{url})指数退避 vs 固定延时拼多多店群自动化上架方案# 不好固定延时foriinrange(3):try:returnrequests.get(url)except:time.sleep(3)# 每次都等3秒# 好指数退避越来越久foriinrange(3):try:returnrequests.get(url)except:waitmin(2**i,30)# 1秒 → 2秒 → 4秒 → 8秒...最多30秒time.sleep(wait)超时控制# 错误不设超时resprequests.get(url)# 可能永远卡住# 正确设连接超时和读取超时resprequests.get(url,timeout(5,30))# 连接5秒读取30秒# 不同场景的超时策略TIMEOUTS{quick:(3,10),# 快速查询normal:(5,30),# 常规请求download:(10,120),# 文件下载}断路器模式如果连续失败N次短时间内不再尝试避免雪崩importtimeclassCircuitBreaker:def__init__(self,failure_threshold5,recovery_timeout60):self.failure_count0self.thresholdfailure_threshold self.recovery_timeoutrecovery_timeout self.last_failure_time0self.stateCLOSED# CLOSED / OPEN / HALF_OPENdefcall(self,func,*args,**kwargs):ifself.stateOPEN:iftime.time()-self.last_failure_timeself.recovery_timeout:self.stateHALF_OPENprint(断路器进入半开状态尝试恢复...)else:raiseException(断路器已打开拒绝请求)try:resultfunc(*args,**kwargs)self.failure_count0self.stateCLOSEDreturnresultexceptExceptionase:self.failure_count1self.last_failure_timetime.time()ifself.failure_countself.threshold:self.stateOPENprint(f连续失败{self.failure_count}次断路器打开)raisee# 使用breakerCircuitBreaker(failure_threshold3,recovery_timeout30)forurlinurls:try:respbreaker.call(requests.get,url,timeout10)process(resp)except:print(f跳过:{url}断路器/超时)网络自检defnetwork_health_check():启动前检查网络状态checks{百度:https://www.baidu.com,目标站点:https://target-site.com}results{}forname,urlinchecks.items():try:resprequests.get(url,timeout5)results[name]f✓ ({resp.elapsed.total_seconds():.2f}s)except:results[name]✗ 不通all_okall(✓invforvinresults.values())returnall_ok,results踩坑实录坑1重试导致重复操作GET请求重试是幂等的重复请求不影响数据但POST请求重试可能导致重复创建记录。对非幂等的请求重试前先检查是否已经创建成功TEMU店群如何管理运营ifresp.status_code500:# 检查是否已经创建了某些服务器收到了请求但返回了500check_resprequests.get(f{url}/{id})ifcheck_resp.status_code200:returncheck_resp# 其实已经创建成功了坑2重试太多次导致流程卡死每个URL重试3次、每次等8秒100个URL如果全失败就是40分钟。设置总超时importtime starttime.time()TOTAL_TIMEOUT300# 整个流程最多5分钟forurlinurls:iftime.time()-startTOTAL_TIMEOUT:print(流程总超时停止)breakrequest_with_retry(url)坑3所有重试都用一样的策略不同错误的处理方式不同DNS解析失败 → 等久一点DNS缓存还没更新连接超时 → 马上重试可能是临时网络波动429限速 → 等Retry-After指定的时间500服务器错误 → 指数退避服务器可能正在恢复写在最后网络不稳定是常态不是异常。建好重试和容错机制让你的影刀流程能在网络抖动时自动恢复而不是一碰就挂。花了半小时写重试逻辑未来省你无数次半夜爬起来手动重启流程。
企业数字化 ERP 产品动态
相关推荐
Cursor收购案解析:AI编程工具的技术革新与商业价值 1. 项目概述:Cursor收购案的行业震动2023年6月,SpaceX以全股票交易方式收购AI编程工具Cursor的消息引发科技圈地震。这笔隐含估值达600亿美元的交易,创造了AI工具并购史上的新纪录。作为一款诞生仅两年的代码辅助工具,Cursor凭什么… · 2026/9/2 9:59:00
影刀RPA 网络请求拦截:捕获Ajax数据的正确姿势 title: “影刀RPA 网络请求拦截:捕获Ajax数据的正确姿势” date: 2026-07-01 author: 林焱
影刀RPA 网络请求拦截:捕获Ajax数据的正确姿势 很多网站的数据不直接写在HTML里,而是页面加载完后通过Ajax异步请求获取。直接抓HTML拿不到数据&… · 2026/9/21 9:33:49
THUSC2019信息学竞赛备战与实战经验分享 1. 比赛背景与个人准备THUSC2019是清华大学计算机系主办的一场面向高中生的信息学竞赛,全称"清华大学中学生信息学夏令营"。作为OI(信息学奥林匹克)圈内的重要赛事,它既是选拔优秀选手的渠道,也是普通选手积… · 2026/9/17 7:33:23
RHEL9启动过程全解析:从固件到systemd的完整链路与排障 有一次我在机房把一台刚装好 RHEL9 的服务器重启,结果它卡在“启动过程”的后半段,屏幕上一个光标闪了快十分钟,登录提示符就是不出来。一开始以为是硬件故障,拔内存、换硬盘都试过,最后才发现是某个 systemd 服务在等… · 2026/9/26 23:25:23
3步搞定交易网站开发合同范本图解步骤 3步搞定交易网站开发合同范本图解步骤 网站被黑挂马不知道怎么办?别慌,这往往不是代码写错了,而是上线前的法律与技术边界没划清。很多老板觉得签合同走形式,结果出了事扯皮,服务器费用白交,数据还得重装。今天把【交易网站开发合同范本】里的技术坑全… · 2026/9/26 23:25:10
CRM私有化部署实战:从数据模型到DeskcommCRM落地 1. 为什么我会盯上 DeskcommCRM 这个项目1.1 从“销售表格满天飞”说起做业务做了这么多年,我见过太多团队死磕客户资料的方式:销售顾问每个人电脑里一份Excel,有按日期命名的,有按客户公司名命名的,还有干脆微信聊天记… · 2026/9/26 23:25:10
MiMo-V2.6-Pro登顶开放权重智能指数,榜单逻辑与部署实践解析 这两天 AI 圈里最热闹的消息,大概就是小米开源的 MiMo-V2.6-Pro 登上了 Artificial Analysis 开放权重模型智能指数的榜首。很多朋友见面第一句都在问:这个榜到底是什么来头?登顶到底意味着什么?我们手里有小算力的开发者能拿它做… · 2026/9/26 23:25:10
别被模板坑了:网站开发iso9001从零搭建实战指南 别被模板坑了:网站开发iso9001从零搭建实战指南 模板网站太丑不够用?这是很多创业者踩过的第一个大坑。 你花了几千块买的模板,客户一眼就看出是“公版”,显得公司不专业,甚至不敢下单。 这时候你就明白了,真正靠谱的… · 2026/9/26 23:25:04
dedecms做网站视频从零搭建的避坑指南 dedecms做网站视频从零搭建的避坑指南 做网站最让人头大的事,莫过于找了一堆模板,套上去一看,要么丑得不敢见人,要么功能少得可怜,根本不够用。尤其是想给官网加个产品展示视频,DedeCMS默认的播放器配置简直让人抓狂,卡顿、黑屏、加载慢… · 2026/9/26 23:25:04
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46