首页 > 编程语言 >python 如何优雅的使用retrying进行重试请求

python 如何优雅的使用retrying进行重试请求

时间:2023-11-02 10:14:35浏览次数:33  
标签:count None retry python max random 重试 retrying wait

retrying 模块

一、 简介

retrying是一个python的重试包,可以用来自动重试一些可能运行失败的程序段,retrying提供一个装饰器函数retry,被装饰的函数就会在运行失败的情况下重新执行,默认只要一直报错就会不断重试

安装:

pip install retrying

  

二、 使用方法

1、 无参数

使用 retry,默认的行为会一直重试, 没有时间等待,直到不再报错为止。

from retrying import retry
from random import randint


@retry  # 使用 retry,默认的行为会一直重试, 没有时间等待,直到不再报错为止
def get_random():
    count = randint(0, 20)
    if count > 0:
        print(f"该随机数等于{count}")
        raise IOError("该随机数大于0")
    else:
        return count


print(f"该随机数等于{get_random()}")

  

2、 有参数

2.1 stop_max_attempt_number

stop_max_attempt_number: 用来设定重试的最大次数,超过该次数就会停止

from retrying import retry
from random import randint


@retry(stop_max_attempt_number=3)
def get_random():
    count = randint(0, 100)
    if count > 0:
        print(f"该随机数等于{count}")
        raise IOError("该随机数大于0")
    else:
        return count


print(f"该随机数等于{get_random()}")

  

 

2.2 stop_max_delay

stop_max_delay:重试多长时间,单位:毫秒

from retrying import retry
from random import randint


@retry(stop_max_delay=100)
def get_random():
    count = randint(0, 20)
    if count > 0:
        print(f"该随机数等于{count}")
        raise IOError("该随机数大于0")
    else:
        return count


print(f"该随机数等于{get_random()}")

  

2.3 wait_fixed

wait_fixed:每次重试之间的固定等待时间(毫秒)

from retrying import retry
from random import randint


@retry(wait_fixed=2)
def get_random():
    count = randint(0, 100)
    if count > 0:
        print(f"该随机数等于{count}")
        raise IOError("该随机数大于0")
    else:
        return count


print(f"该随机数等于{get_random()}")

  

2.4 wait_random_[min/max]

wait_random_[min/max]: 两次retrying之间的停留最短/最长时间

from retrying import retry
from random import randint


@retry(wait_random_min=1, wait_random_max=9)
def get_random():
    count = randint(0, 100)
    if count > 0:
        print(f"该随机数等于{count}")
        raise IOError("该随机数大于0")
    else:
        return count


print(f"该随机数等于{get_random()}")

  

2.5 wait_exponential_[multiplier/max]

wait_exponential_[multiplier/max]:重试尝试中增加时间间隔

from retrying import retry
from random import randint


@retry(wait_exponential_multiplier=100, wait_exponential_max=10000)
def get_random():
    count = randint(0, 100)
    if count > 0:
        print(f"该随机数等于{count}")
        raise IOError("该随机数大于0")
    else:
        return count


print(f"该随机数等于{get_random()}")

  

2.6 其他可用参数

class Retrying(object):
    def __init__(
        self,
        stop=None, wait=None,  # 停止时间和等待时间
        stop_max_attempt_number=None, # 最大尝试次数
        stop_max_delay=None,  # 最大运行时间
        wait_fixed=None,    # 延迟时间
        wait_random_min=None,  wait_random_max=None, # 随机等待时间
        wait_incrementing_start=None, wait_incrementing_increment=None,  # 运行下次,增加延时
        wait_incrementing_max=None,
        wait_exponential_multiplier=None,wait_exponential_max=None, # 等待时间按指数形式增长
        retry_on_exception=None,
        retry_on_result=None,
        wrap_exception=False,
        stop_func=None,   # 每次完成后运行的新函数
        wait_func=None,
        wait_jitter_max=None,
        before_attempts=None,
        after_attempts=None,

  

 

标签:count,None,retry,python,max,random,重试,retrying,wait
From: https://www.cnblogs.com/pywen/p/17804771.html

相关文章

  • Python基础入门:从Hello World到简单函数
    当然可以帮你写一篇Python基础入门的文章。下面是一篇题为《Python基础入门:从HelloWorld到简单函数》的原创文章,内容包括了Python的基本语法、变量、控制流以及简单函数的介绍。文章中也包含了相应的Python代码示例。Python基础入门:从HelloWorld到简单函数Python是一门简洁、易......
  • Python如何去采集APP数据?我下面提供下思路和结构代码
    当涉及到采集APP数据时,Python是一个强大的工具,因为它具有丰富的库和框架,能够帮助你轻松地获取所需的信息。无论是分析竞争对手的市场表现,还是监控用户行为,Python都可以成为你的数据采集和分析的得力助手。本文将介绍如何使用Python采集APP数据的方法,包括Web抓取、API调用和数据清......
  • python轰炸代码
    importpyperclip#需要安装pyperclip库importtimeimportkeyboard#需要安装keyboard库defmain():str="原神,启动!"#轰炸内容time.sleep(5)forjinrange(50):#轰炸次数forstr1instr.split(","):pyperclip.copy(s......
  • Python自动化处理Excel数据
    需求描述:数据格式如下所示,需要分离出2023年7月1号之后的数据明细数据核对与处理:从Excel文件中提取特定日期后的签收数据1.引言在实际数据处理和分析过程中,经常会遇到需要从大量数据中提取出特定日期范围内的信息的需求。本文将介绍如何使用Python的pandas库来处理Excel文件,并......
  • Python JSON 使用指南:解析和转换数据
    JSON是一种用于存储和交换数据的语法。JSON是文本,使用JavaScript对象表示法编写。Python中的JSONPython有一个内置的json包,可用于处理JSON数据。示例:导入json模块:importjson解析JSON-从JSON转换为Python如果您有一个JSON字符串,可以使用json.loads()......
  • Python筛选多个Excel中数据缺失程度最少的文件
      本文介绍基于Python语言,针对一个文件夹下大量的Excel表格文件,基于其中每一个文件内、某一列数据的特征,对其加以筛选,并将符合要求与不符合要求的文件分别复制到另外两个新的文件夹中的方法。  首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel表格文件(在......
  • python实现定时器产生随机数
    【精选】python实现定时器_python定时器-CSDN博客参考的这位博主的python定时器题目长这样:编写一个程序从1~20里随机产生3个数每过5秒加一次,连续加三次后输出结果,下面是代码#-*-coding:utf-8-*-importthreadingimporttimeimportrandomcancel_tmr=Falsecount=0......
  • Python JSON 使用指南:解析和转换数据
    JSON是一种用于存储和交换数据的语法。JSON是文本,使用JavaScript对象表示法编写。Python中的JSONPython有一个内置的json包,可用于处理JSON数据。示例:导入json模块:importjson解析JSON-从JSON转换为Python如果您有一个JSON字符串,可以使用json.loads()......
  • 【python爬虫】80页md笔记,0基础到scrapy项目高手,第(3)篇,requests网络请求模块详解
    本文主要学习一下关于爬虫的相关前置知识和一些理论性的知识,通过本文我们能够知道什么是爬虫,都有那些分类,爬虫能干什么等,同时还会站在爬虫的角度复习一下http协议。完整版笔记直接地址:请移步这里共8章,37子模块,总计56668字requests模块本阶段本文主要学习requests这......
  • Python47days
    overflow溢出属性visible默认值。内容不会被修剪,会呈现在元素框之外。hidden 内容会被修剪,并且其余内容是不可见的。scroll 内容会被修剪,但是浏览器会显示滚动条以便查看其余的内容。auto 如果内容被修剪,则浏览器会显示滚动条以便查看其余的内容。●overflow(水平和垂直均......