python超时重新请求解决方案

 更新时间:2019年10月21日 09:57:10   作者:百变小超  
这篇文章主要介绍了python超时重新请求解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

目前的解决方案有

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

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

3.结合采用 eventlet 和 retrying模块 (eventlet 原理尚需深入研究)

下面的方法实现:超过指定时间重新尝试某个方法

# -*- coding: utf-8 -*-
import random
import time
 
import eventlet
from retrying import retry
 
eventlet.monkey_patch()
 
 
class RetryTimeOutException(Exception):
  def __init__(self, *args, **kwargs):
    pass
 
 
def 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 = False
      with eventlet.Timeout(timeout_second, False):
        r = func(*args, **kwargs)
        pass_flag = True
        print("Success after method.")
      if not pass_flag:
        raise RetryTimeOutException("Time out..")
      print("Exit from retry.")
      return r
 
    return decor
 
  return retry_decor
 
 
def 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随机生成身份证号码及校验功能

    Python随机生成身份证号码及校验功能

    这篇文章主要介绍了Python随机生成身份证号码及校验功能,文中给大家提到了校验码计算方法,需要的朋友可以参考下
    2018-12-12
  • python实现简单贪吃蛇游戏

    python实现简单贪吃蛇游戏

    这篇文章主要为大家详细介绍了python实现简单贪吃蛇游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Pandas筛选某列过滤的方法

    Pandas筛选某列过滤的方法

    本文主要介绍了Pandas筛选某列过滤的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • python datetime 和时间戳互相转换问题

    python datetime 和时间戳互相转换问题

    time和datetime都是Python中的内置模块(不需要安装,直接可以使用),都可以对时间进行获取,对时间格式进行转换,如时间戳和时间字符串的相互转换,本文先给大家介绍python datetime 和时间戳互转问题,感兴趣的朋友一起看看吧
    2022-11-11
  • 如何在python中使用selenium的示例

    如何在python中使用selenium的示例

    这篇文章主要介绍了如何在python中使用selenium的示例,selenium提供了一个通用的接口,可模拟用户来操作浏览器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-12-12
  • Python Dict 到 Dataclass实现高效数据访问与管理的两种方式(推荐)

    Python Dict 到 Dataclass实现高效数据访问与管理的两种方式(推荐)

    本文介绍了Python中的字典和DataClass两种数据结构,并探讨了如何将字典转换为DataClass,字典适用于键值对存储,感兴趣的朋友一起看看吧
    2024-12-12
  • python获取地震信息 微信实时推送

    python获取地震信息 微信实时推送

    这篇文章主要为大家详细介绍了python获取地震信息,微信实时推送,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Python中使用__new__实现单例模式并解析

    Python中使用__new__实现单例模式并解析

    单例模式是一个经典设计模式,简要的说,一个类的单例模式就是它只能被实例化一次,实例变量在第一次实例化时就已经固定。 这篇文章主要介绍了Python中使用__new__实现单例模式并解析 ,需要的朋友可以参考下
    2019-06-06
  • python中exe文件解包方法详解

    python中exe文件解包方法详解

    这篇文章主要给大家介绍了关于python中exe文件解包方法的相关资料,文中通过图文以及实例代码介绍的非常详细,对大家学习或者使用python具有一定的参考学习价值,需要的朋友可以参考下
    2023-06-06
  • python 数字转换为日期的三种实现方法

    python 数字转换为日期的三种实现方法

    在Python中,我们经常需要处理日期和时间,本文主要介绍了python 数字转换为日期的三种实现方法,包含datetime模块,strftime方法及pandas库,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02

最新评论