尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
影刀RPA 网络超时与重试策略:打造高可用的自动化流程
影刀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)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/41eada1283084e0b8056f1ceacfde9d4.png#pic_center)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:![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9eba0fed2ced483688dcfbe4fc964bdd.png#pic_center)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服务器错误 → 指数退避服务器可能正在恢复写在最后网络不稳定是常态不是异常。建好重试和容错机制让你的影刀流程能在网络抖动时自动恢复而不是一碰就挂。花了半小时写重试逻辑未来省你无数次半夜爬起来手动重启流程。
RELATED

相关推荐

Cursor收购案解析:AI编程工具的技术革新与商业价值

Cursor收购案解析:AI编程工具的技术革新与商业价值

1. 项目概述:Cursor收购案的行业震动2023年6月,SpaceX以全股票交易方式收购AI编程工具Cursor的消息引发科技圈地震。这笔隐含估值达600亿美元的交易,创造了AI工具并购史上的新纪录。作为一款诞生仅两年的代码辅助工具,Cursor凭什么…

📅 2026/8/22 21:57:18
影刀RPA 网络请求拦截:捕获Ajax数据的正确姿势

影刀RPA 网络请求拦截:捕获Ajax数据的正确姿势

title: “影刀RPA 网络请求拦截:捕获Ajax数据的正确姿势” date: 2026-07-01 author: 林焱 影刀RPA 网络请求拦截:捕获Ajax数据的正确姿势 很多网站的数据不直接写在HTML里,而是页面加载完后通过Ajax异步请求获取。直接抓HTML拿不到数据&…

📅 2026/8/22 21:57:18
THUSC2019信息学竞赛备战与实战经验分享

THUSC2019信息学竞赛备战与实战经验分享

1. 比赛背景与个人准备THUSC2019是清华大学计算机系主办的一场面向高中生的信息学竞赛,全称"清华大学中学生信息学夏令营"。作为OI(信息学奥林匹克)圈内的重要赛事,它既是选拔优秀选手的渠道,也是普通选手积…

📅 2026/8/22 21:57:19
MORE NEWS

更多资讯

📰

数字职业转型指南:技术路径与核心能力解析

1. 数字职业浪潮下的新机遇最近两年有个明显的趋势:越来越多的传统岗位正在被数字化重构。我身边至少有三位做财务的朋友转型成了财务系统顾问,两位教师朋友开始做在线课程开发。这种变化不是偶然,而是新经济形态下的必然选择。数字职业&…

📰

推荐3个GitHub上能直接解决问题的项目:本地OCR、视频嗅探与AI仿真

打开GitHub,大家最容易干的一件事情是什么?对着Star排行翻一遍,然后默默收藏三五个项目,最后真正装到电脑上用的,可能一个都没有。所以今天我只推荐3个,筛选标准也很简单:不是看谁最火&#xff…

📰

HarmonyOS数学教育应用开发实战:数字组合算法与分布式教学

1. HarmonyOS数学广角应用概述 "数字搭配"作为HarmonyOS数学广角系列的第29个应用实例,是面向教育场景设计的交互式数学学习工具。这个应用典型运行在搭载HarmonyOS的平板设备上,通过可视化方式帮助小学生理解数字组合与排列的基本概念。从技术…

📰

PHP陪玩平台源码实战:从架构设计到WAP自适应开发

简介:这是一个基于 PHP 开发的游戏陪玩平台源码,核心为美女约玩系统,面向有意搭建陪玩社区、开展社交游戏服务的开发者或创业者。系统采用 WAP 手机端自适应设计,能自动适配不同尺寸屏幕,兼顾电脑端与手机端访问体验。…

📰

风电功率预测误差的时空相关性建模与Matlab实现

1. 风电功率预测误差建模的背景与挑战在新能源发电领域,风电功率预测的准确性直接影响电网调度和经济运行。然而,由于风速的随机性和间歇性特征,预测结果不可避免地存在误差。传统误差分析方法往往将预测误差视为独立随机变量,忽略…

📰

Bokeh Crossfilter 交互式交叉筛选应用实战:基于 Pandas 的多维度数据联动绘图指南

Bokeh Crossfilter 交互式交叉筛选应用实战:基于 Pandas 的多维度数据联动绘图指南 【免费下载链接】bokeh Interactive Data Visualization in the browser, from Python 项目地址: https://gitcode.com/GitHub_Trending/bo/bokeh 导读 crossfilter 是 Bok…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬