在函数内部,我使用了类似的重试机制(总是在 try/except 块中):
def load(self):
[........]
# Retry mechanism for locking database
for i in range(1, max_connection_retries+1):
try:
cu.lock()
break
except LockError as l_error:
if i < max_connection_retries:
sleep(20)
continue
else:
raise ContinuableError (logger.console(datetime.now().time().strftime ("%b %d %H:%M:%S") + ' ERROR:Impossible to lock the database after %i retries' % max_connection_retries))
[.......]
Run Code Online (Sandbox Code Playgroud)
我在同一功能的其他部分和其他功能中多次使用这种机制。可以将装饰器仅应用于代码的这一部分吗?类似的东西:
def load(self):
[.......]
@retry(max=5,message='blablabla')
try:
cu.lock()
break
except LockError as l_error:
[.......]
@retry(max=5)
try:
cu.unlock()
break
except LockError as l_error:
Run Code Online (Sandbox Code Playgroud)
如果是这样,你能帮我展示一个装饰器的例子来完成这样的任务吗?