我是python的新手,尝试编写逻辑以在失败时重试某些方法。为了确保这一点,我想将需要重试的方法作为参数传递给try_again方法。
我想编写一个重试逻辑,以便当方法失败时,类似于Scala中的尾部递归逻辑,该方法将在无错误的情况下重试任意次,然后再出错。 在我们的场景中不建议使用@retry功能,我们希望使用类似于其他语言的自定义重试逻辑,在该逻辑中我们可以参数化重试次数和重试间隔时间。我尝试了以下代码,并希望了解在try_again方法中传递参数的任何更好/正确的方法。
import logging
import os
log_level = os.environ.get('LOG_LEVEL', 'INFO')
logging.root.setLevel(logging.getLevelName(log_level))
log = logging.getLogger()
class A(object):
def __init__(self, name):
self.name = name
def execute_A_logic(self):
"""
A logic
"""
return self.name
class B(object):
def __init__(self, no_of_retries, interval):
self.retries = no_of_retries
self.interval = interval
def try_again(self, method_to_execute: (), try_count = None):
try_count = 0 if try_count is None else try_count
try:
log.info(try_count)
method_to_execute()
except Exception as e:
log.info(e)
if try_count < self.retries:
try_count += 1
log.info("try count within limit. retry execution")
self.try_again(method_to_execute, try_count)
class C(object):
def __init__(self, some_name, some_retries, some_interval):
self.some_thing = some_name
self.some_num_retries = some_retries
self.some_time_interval = some_interval
self.class_A = A(name=self.some_thing)
self.class_B = B(no_of_retries=self.some_num_retries, interval=self.some_time_interval)
def execute_C_logic(self):
self.class_B.try_again(method_to_execute=self.class_A.execute_A_logic, try_count=0)
"""
C logic
"""
我想知道我使用try_again的方式是否正确。在这里,我在try_again方法中键入指定的变量。重试的方法没有参数,但是具有该方法的类具有多个变量。 同样,是否将从类C中正确执行方法execute_A_logic。 请纠正我的任何错误,并告诉其他更好的代码编写方法。