在应用中,有时候会 依赖第三方模块执行方法,比如调用某模块的上传下载,数据库查询等操作的时候,如果出现网络问题或其他问题,可能有超时重新请求的情况;

目前的解决方案有

  1. 信号量,但不支持window;

  2. 多线程,但是 如果是大量的数据重复操作尝试,会出现线程管理混乱,开启上万个线程的问题;

  3. 结合采用 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 超时重试方法相关推荐

  1. tenacity 报错_关于Python错误重试方法总结

    前言 Tenacity是一个 Apache 2.0授权的通用重试库,用 Python 编写,用于简化向几乎所有内容添加重试行为的任务.它起源于一个重新尝试的分支,可惜这个分支已经不复存在了. 使用Te ...

  2. python网页请求超时_python爬虫多次请求超时的几种重试方法(6种)

    第一种方法 headers = Dict() url = 'https://www.baidu.com' try: proxies = None response = requests.get(url ...

  3. Python 下载依赖包环境经常失败超时解决方法

    Python 下载依赖包环境经常失败超时解决方法 参考文章: (1)Python 下载依赖包环境经常失败超时解决方法 (2)https://www.cnblogs.com/boonya/p/11909 ...

  4. dubbo超时重试和异常处理

    dubbo超时重试和异常处理 参考: https://www.cnblogs.com/ASPNET2008/p/7292472.html https://www.tuicool.com/article ...

  5. Dubbo(十一)dubbo的超时重试配置以及启动检查

    一.dubbo超时重试配置 dubbo重试次数配置使用的是retries 属性.可以配置于服务提供者.消费者的接口方法.接口类.以及全局配置范围上.与超时配置优先级一样遵循就近原则,方法上的配置优先于 ...

  6. 怎样实现一个非阻塞的超时重试任务队列

    起因 最近接手一个项目,要把其中的阻塞任务队列,重构成非阻塞.在客户端很少有机会直接处理任务队列.项目完成需要总结经验 阻塞的发生 我这里先说明我遇到的阻塞问题,我这里的阻塞不是多线程访问的阻塞,概念 ...

  7. HttpClient 连接超时重试处理

    记录一次HttpClient 连接超时重试问题 原代码如下: public static void main(String[] args) throws UnsupportedEncodingExce ...

  8. python 例外 重试_Python例外:简介

    python 例外 重试 A Python program terminates as soon as it encounters an error. In Python, an error can ...

  9. Volley超时重试机制详解

    Volley超时重试机制 基础用法 Volley为开发者提供了可配置的超时重试机制,我们在使用时只需要为我们的Request设置自定义的RetryPolicy即可. 参考设置代码如下: int DEF ...

最新文章

  1. 2011让人蛋疼的签名
  2. 马斯克认为 AI 必超越并威胁人类,他宁愿搞脑机接口也不碰AI
  3. Linux磁盘分区与挂载
  4. 函数式编程 -- 测试题集
  5. 一张壁纸就是一段故事,壁纸控的找图不难!
  6. android jenkins 动态版本,Jenkins工具(二)之 Jenkins集成android工程
  7. MSVCRTD.lib(crtexe.obj) : error LNK2019: 无法解析的外部符号 _main,该符号在函数 ___tmainCRTStart...
  8. 实习成长之路:MySQL一: 一条SQL查询语句是如何执行的?
  9. Rabbitmq-server-3.7.18安装完整过程
  10. 8位串行加法器 计算机组成原理,安尧-2013434158-计算机组成原理8位加法器实验报告.doc...
  11. 伺服驱动器方案,迈信ep100 成熟方案STM32源码
  12. 手绘小人多彩论文答辩PPT模板
  13. 春节感悟 - 原年人的爱和恨
  14. 操作系统---处理器调度
  15. 《中国近代史纲要》考试过关?Python帮你划重点
  16. 微信素材管理,新增临时素材
  17. 达人评测 iPad Pro 2021怎么样
  18. mysql计算月初日期_mysql 获取上月、本月月初月末
  19. 【设置版本号】React Native 通过配置文件package.json设置 Android安卓和iOS版本号
  20. android 获取全国地址,Android获取所有国家列表

热门文章

  1. Hibernate——Query查询
  2. Spring-MVC入门(一):入门实例
  3. 陆续放出各种安装及配置文档
  4. 初始化报表的应用用户
  5. python3的样子_python3与python2不一样的地方
  6. 【学习笔记】FI-AR模块概述
  7. 【转SQL】truncate:清空表中数据
  8. 【实用】SAP修改记录表开发
  9. SAP HR模块的基础数据表和增强配置
  10. 如何蒸螃蟹?教你蒸螃蟹3个小窍门