{{format('0')}} {{format('352')}} {{format('1670')}}

【PY模块】尝试多次请求 retrying(第三方库) [ Python极客 ]

大数据男孩 文章 正文

想做一个技术博客,奈何实力不够
分享

明妃

{{nature("2022-08-14 17:23:19")}}更新

说明

pip install retrying

默认使用会自动调用 报错的函数,直到返回值

import random
from retrying import retry
from loguru import logger

@retry
def fun():
    r = random.randint(0, 4)
    if r == 3:
        logger.success(f'Yes')
    else:
        logger.warning(f'IS {r} NOT 3')
        raise ValueError(f'IS {r} NOT 3')

if __name__ == '__main__':
    fun()

[mark]()

常用方式

可以搭配使用

# 最大重试次数
@retry(stop_max_attempt_number=3)
def fun():

# 重试间隔时间(毫秒)
@retry(wait_fixed=2000) 
def fun()

# 随机重试时间(毫秒)
@retry(wait_random_min=1000, wait_random_max=2000)
def fun()

# 重试超时时间,超过后 不再进行重试(毫秒)
@retry(stop_max_delay=10000)
def fun()

# 重试间隔呈 指数 增长,到 wait_exponential_max 停止增长(毫秒)
# wait_exponential_multiplier 为乘数,1000 相对于 2^1 2^2 ...
@retry(wait_exponential_multiplier=1000, wait_exponential_max=10000)
def fun()

某种错误触发重试

当函数产生 ValueError 时,重试

def retry_if_value_error(exception):
    return isinstance(exception, ValueError)

@retry(retry_on_exception=retry_if_value_error)
def fun():

函数返回 某种结果 重试

import random
from retrying import retry
from loguru import logger

def retry_result_is_3(result):
    # 结果 不为 3 则重试
    return result != 3

@retry(retry_on_result=retry_result_is_3) # lambda x: != 3
def fun():
    r = random.randint(0, 4)
    logger.success(f'IS {r}')
    return r

if __name__ == '__main__':
    fun()

[mark]()

评论 0
0
{{userInfo.data?.nickname}}
{{userInfo.data?.email}}
TOP 2
Spark 2.0 单机模式与集群模式 安装

{{nature('2020-01-02 16:47:07')}} {{format('12522')}}人已阅读

TOP 3
Office 2016 Pro Plus 激活

{{nature('2019-12-11 20:43:10')}} {{format('9410')}}人已阅读

TOP 4
Linux上 MySQL 开启远程登陆的两种方法

{{nature('2019-12-26 17:20:52')}} {{format('7405')}}人已阅读

TOP 5
Linux 安装 MySQL 5.7

{{nature('2019-12-26 16:03:55')}} {{format('4880')}}人已阅读

目录

标签云

Python 模块

一言

# {{hitokoto.data.from || '来自'}} #
{{hitokoto.data.hitokoto || '内容'}}
作者:{{hitokoto.data.from_who || '作者'}}
自定义UI
配色方案

侧边栏