我正在尝试重新尝试使用坚韧(没有装饰师)。我的代码看起来像解释过的这里。
import logging
from tenacity import retry
import tenacity
def print_msg():
try:
logging.info('Hello')
logging.info("World")
raise Exception('Test error')
except Exception as e:
logging.error('caught error')
raise e
if __name__ == '__main__':
logging.basicConfig(
format='%(asctime)s,%(msecs)d %(levelname)-8s [%(filename)s:%(lineno)d] %(message)s',
datefmt='%d-%m-%Y:%H:%M:%S',
level=logging.INFO)
logging.info('Starting')
try:
r = tenacity.Retrying(
tenacity.stop_after_attempt(2),
tenacity.wait_incrementing(start=10, increment=100, max=1000),
reraise=True
)
try:
r.call(print_msg)
except Exception:
logging.error('Test error 2')
except Exception:
logging.error('Received Exception')在执行上述代码时。输出如下所示,没有重试
/Users/dmanna/PycharmProjects/demo/venv/bin/python /Users/dmanna/PycharmProjects/demo/retrier.py
25-11-2018:00:29:47,140 INFO [retrier.py:21] Starting
25-11-2018:00:29:47,140 INFO [retrier.py:8] Hello
25-11-2018:00:29:47,140 INFO [retrier.py:9] World
25-11-2018:00:29:47,140 ERROR [retrier.py:12] caught error
25-11-2018:00:29:47,141 ERROR [retrier.py:31] Test error 2
Process finished with exit code 0谁能让我知道出了什么问题,因为我没有看到在上面的代码任何重试?
发布于 2018-11-26 12:10:13
这里已经回答了这个问题。交叉张贴答案
哼,我不认为您在这里正确地使用了API: R= tenacity.Retrying( tenacity.stop_after_attempt(2),tenacity.wait_incrementing(start=10,increment=100,max=1000),reraise=True ) 这意味着: R= tenacity.Retrying( sleep=tenacity.stop_after_attempt(2),stop=tenacity.wait_incrementing(start=10,increment=100,max=1000),reraise=True ) 做你想做的事。 你想: R= tenacity.Retrying( stop=tenacity.stop_after_attempt(2),wait=tenacity.wait_incrementing(start=10,increment=100,max=1000),reraise=True )
发布于 2020-05-03 16:32:04
注意对于Python用户(它支持注释),要显式地强制在3.4+中进行重试,一般的用例是用一个简单的@retry对它进行注释,然后引发特殊的异常TryAgain。
@retry
def do_something():
result = something_else()
if result == 23:
raise TryAgain这种类似于Python2.7 在这页上的答案的方法也可以实现:
import tenacity
def do_something():
result = something_else()
if result == 23:
raise TryAgain
r = tenacity.Retrying(
stop=tenacity.stop_after_attempt(2),
wait=tenacity.wait_incrementing(start=10, increment=100, max=1000)
)
r.wraps(do_something)有关更多细节,请参见关于是否重试的API文档或定义注释的源。。
https://stackoverflow.com/questions/53461533
复制相似问题