您现在的位置是:网站首页> 编程资料编程资料
python包实现 retrying 重复回调操作_python_
                    
                
                2023-05-26
                302人已围观
            
简介 python包实现 retrying 重复回调操作_python_
一、安装
- 循环、重复回调我们在很多场景中会用到
 - 不仅在支付场景中,我们需要通过反复的回调知道用户的支付状态
 - 还有在请求中,如果请求失败,我们需要再重新进行进行请求,防止请求异常导致数据缺失
 
pip install retrying
二、一直请求
- 假如我们希望在代码碰到异常时,一直回调,直到成功
 - 下面方法中,我们直接访问一个未定义的变量,肯定会走下面的Exception中
 - 这个时候我们可以将这一次错误写进日志,但是让程序继续执行这个方法,直到没有异常为止
 - 因为这里模拟的是肯定有异常,所以该程序会一直返回回调,不间断的循环往复
 
from retrying import retry @retry() def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
三、设置最大运行次数
- 如果我们在请求中遇到异常时候
 - 可以通过 stop_max_attempt_number 设置一个最大运行次数
 - 当回调次数超过设置值,将不再执行回调
 - 这里我们设置最大运行次数为5次
 
from retrying import retry @retry(stop_max_attempt_number=5) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
四、设置重试的最大时间
- 可以通过
stop_max_delay设置失败重试的最大时间, 单位毫秒 - 超出时间,则停止重试
 
from retrying import retry @retry(stop_max_delay=1000) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
五、设置间隔时间
- 设置失败重试的间隔时间, 单位毫秒
 - 降低回调频率
 
from retrying import retry @retry(wait_fixed=1000) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
六、设置随机间隔时间
- 设置失败重试随机性间隔时间, 单位毫秒
 - 可以使得访问频率不均匀
 
from retrying import retry @retry(wait_random_min=5000, wait_random_max=50000) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
七、随机倍数间隔时间
- 可以通过设置
wait_exponential_multiplier间隔时间倍数增加 - 可以通过设置
wait_exponential_max最大间隔时间 
from retrying import retry @retry(wait_exponential_multiplier=1000, wait_exponential_max=10000) def say(): try: autofelix except Exception as e: # 可以将错误记录日志 print(e) raise say()
八、指定异常类型
- 可以通过
retry_on_exception设置指定异常类型 - 指定的异常类型会重试,不指定的类型,会直接异常退出
 - 如果设置 
wrap_exception参数为True,则其他类型异常 
from retrying import retry def retry_error(exception): return isinstance(exception, RetryError) # 会重复调用 @retry(etry_on_exception=retry_error) def say(): try: autofelix except RetryError as e: raise RetryError # 只调用一次 @retry(etry_on_exception=retry_error, wrap_exception=True) def say(): raise Exception('a') say()九、过滤回调
- 可以设置
retry_on_result指定哪些结果需要去回调 - 将请求结果放到 
retry_on_result指定方法中进行过滤,如果返回None,则继续回调,否则就结束 
from retrying import retry def retry_filter(result): print("this is result") return result is not None @retry(retry_on_result=retry_filter) def say(): print('Retry forever ignoring Exceptions with no wait if return value is None') return None say()十、异常执行
- 通过设置
stop_func每次抛出异常时都会执行的函数 - 如果和
stop_max_delay、stop_max_attempt_number配合使用,则后两者会失效 
from retrying import retry def stop_record(attempts, delay): print("logging %d--->%d" % (attempts,delay)) @retry(stop_max_delay=10, stop_func=stop_record) def say(): print("i am autofelix") raise Exception say()到此这篇关于python 包之 retrying 重复回调的文章就介绍到这了,更多相关python retrying 内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
                
                
相关内容
- 详解python中读取和查看图片的6种方法_python_
 - 解决plt.imshow显示cv2.imread读取的图像有色差发蓝的四种方法问题_python_
 - Python&Matlab实现炫酷的3D旋转图_python_
 - Python图像运算之图像阈值化处理详解_python_
 - 使用matplotlib创建Gif动图的实现_python_
 - Python中的np.random.seed()随机数种子问题及解决方法_python_
 - python使用Random随机生成列表的方法实例_python_
 - Python Pygame实战之五款童年经典游戏合集_python_
 - 基于Python实现实时监控CPU使用率_python_
 - python 包之 APScheduler 定时任务_python_
 
                                
                                                        
                                
                                                        
                                
                                                        
    