python 超时重试方法
在应用中,有时候会 依赖第三方模块执行方法,比如调用某模块的上传下载,数据库查询等操作的时候,如果出现网络问题或其他问题,可能有超时重新请求的情况;
目前的解决方案有
信号量,但不支持window;
多线程,但是 如果是大量的数据重复操作尝试,会出现线程管理混乱,开启上万个线程的问题;
结合采用 eventlet 和 retrying模块 (eventlet 原理尚需深入研究)
下面的方法实现:超过指定时间重新尝试某个方法
'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:579817333
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# -*- coding: utf-8 -*-
import random
import timeimport eventlet
from retrying import retryeventlet.monkey_patch()class RetryTimeOutException(Exception):def __init__(self, *args, **kwargs):passdef retry_if_timeout(exception):"""Return True if we should retry (in this case when it's an IOError), False otherwise"""return isinstance(exception, RetryTimeOutException)def retry_fun(retries=3, timeout_second=2):"""will retry ${retries} times when process time beyond ${timeout_second} ;:param retries: The retry times:param timeout_second: The max process time"""def retry_decor(func):@retry(stop_max_attempt_number=retries, retry_on_exception=retry_if_timeout)def decor(*args, **kwargs):print("In retry method..")pass_flag = Falsewith eventlet.Timeout(timeout_second, False):r = func(*args, **kwargs)pass_flag = Trueprint("Success after method.")if not pass_flag:raise RetryTimeOutException("Time out..")print("Exit from retry.")return rreturn decorreturn retry_decordef do_request():print("begin request...")sleep_time = random.randint(1, 4)print("request sleep time: %s." % sleep_time)time.sleep(sleep_time)print("end request...")return True@retry_fun(retries=3)
def retry_request():r = do_request()print(r)if __name__ == '__main__':retry_request()
python 超时重试方法相关推荐
- tenacity 报错_关于Python错误重试方法总结
前言 Tenacity是一个 Apache 2.0授权的通用重试库,用 Python 编写,用于简化向几乎所有内容添加重试行为的任务.它起源于一个重新尝试的分支,可惜这个分支已经不复存在了. 使用Te ...
- python网页请求超时_python爬虫多次请求超时的几种重试方法(6种)
第一种方法 headers = Dict() url = 'https://www.baidu.com' try: proxies = None response = requests.get(url ...
- Python 下载依赖包环境经常失败超时解决方法
Python 下载依赖包环境经常失败超时解决方法 参考文章: (1)Python 下载依赖包环境经常失败超时解决方法 (2)https://www.cnblogs.com/boonya/p/11909 ...
- dubbo超时重试和异常处理
dubbo超时重试和异常处理 参考: https://www.cnblogs.com/ASPNET2008/p/7292472.html https://www.tuicool.com/article ...
- Dubbo(十一)dubbo的超时重试配置以及启动检查
一.dubbo超时重试配置 dubbo重试次数配置使用的是retries 属性.可以配置于服务提供者.消费者的接口方法.接口类.以及全局配置范围上.与超时配置优先级一样遵循就近原则,方法上的配置优先于 ...
- 怎样实现一个非阻塞的超时重试任务队列
起因 最近接手一个项目,要把其中的阻塞任务队列,重构成非阻塞.在客户端很少有机会直接处理任务队列.项目完成需要总结经验 阻塞的发生 我这里先说明我遇到的阻塞问题,我这里的阻塞不是多线程访问的阻塞,概念 ...
- HttpClient 连接超时重试处理
记录一次HttpClient 连接超时重试问题 原代码如下: public static void main(String[] args) throws UnsupportedEncodingExce ...
- python 例外 重试_Python例外:简介
python 例外 重试 A Python program terminates as soon as it encounters an error. In Python, an error can ...
- Volley超时重试机制详解
Volley超时重试机制 基础用法 Volley为开发者提供了可配置的超时重试机制,我们在使用时只需要为我们的Request设置自定义的RetryPolicy即可. 参考设置代码如下: int DEF ...
最新文章
- 2011让人蛋疼的签名
- 马斯克认为 AI 必超越并威胁人类,他宁愿搞脑机接口也不碰AI
- Linux磁盘分区与挂载
- 函数式编程 -- 测试题集
- 一张壁纸就是一段故事,壁纸控的找图不难!
- android jenkins 动态版本,Jenkins工具(二)之 Jenkins集成android工程
- MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStart...
- 实习成长之路:MySQL一: 一条SQL查询语句是如何执行的?
- Rabbitmq-server-3.7.18安装完整过程
- 8位串行加法器 计算机组成原理,安尧-2013434158-计算机组成原理8位加法器实验报告.doc...
- 伺服驱动器方案,迈信ep100 成熟方案STM32源码
- 手绘小人多彩论文答辩PPT模板
- 春节感悟 - 原年人的爱和恨
- 操作系统---处理器调度
- 《中国近代史纲要》考试过关?Python帮你划重点
- 微信素材管理,新增临时素材
- 达人评测 iPad Pro 2021怎么样
- mysql计算月初日期_mysql 获取上月、本月月初月末
- 【设置版本号】React Native 通过配置文件package.json设置 Android安卓和iOS版本号
- android 获取全国地址,Android获取所有国家列表