python的重试库tenacity用法以及类似库retry、requests实现

介绍

tenacity is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything. It originates from a fork of retrying which is sadly no longer maintained. Tenacity isn’t api compatible with retrying but adds significant new functionality and fixes a number of longstanding bugs.

安装

pip install tenacity

文档:

https://tenacity.readthedocs.io/en/latest/

demo:

In [13]: import random
    ...: from tenacity import retry
    ...:
    ...: @retry
    ...: def do_something_unreliable():
    ...:     value = random.randint(0,10)
    ...:     if value > 1:
    ...:         raise IOError("Broken sauce, everything is hosed!!!111one")
    ...:     else:
    ...:         print(value)
    ...:         return "Awesome sauce!"
    ...:
    ...: print(do_something_unreliable())
1
Awesome sauce!

In [14]: import random
    ...: from tenacity import retry
    ...:
    ...: @retry
    ...: def do_something_unreliable():
    ...:     value = random.randint(0,10)
    ...:     if value > 1:
    ...:         raise IOError("Broken sauce, everything is hosed!!!111one")
    ...:     else:
    ...:         print(value)
    ...:         return "Awesome sauce!"
    ...:
    ...: print(do_something_unreliable())
1
Awesome sauce!

In [15]: import random
    ...: from tenacity import retry
    ...:
    ...: @retry
    ...: def do_something_unreliable():
    ...:     value = random.randint(0,10)
    ...:     if value > 1:
    ...:         raise IOError("Broken sauce, everything is hosed!!!111one")
    ...:     else:
    ...:         print(value)
    ...:         return "Awesome sauce!"
    ...:
    ...: print(do_something_unreliable())
0
Awesome sauce!

In [16]: import random
    ...: from tenacity import retry
    ...:
    ...: @retry
    ...: def do_something_unreliable():
    ...:     value = random.randint(0,10)
    ...:     if value > 1:
    ...:         raise IOError("Broken sauce, everything is hosed!!!111one")
    ...:     else:
    ...:         print(value)
    ...:         return "Awesome sauce!"
    ...:
    ...: print(do_something_unreliable())
1
Awesome sauce!

源代码:

https://github.com/jd/tenacity

类似库:retry

pip install retry

自己可以参考retry源代码自己实现

requests多次尝试实现:

https://www.cnblogs.com/eshizhan/p/5072626.html

原文地址:https://www.cnblogs.com/shengulong/p/10373597.html