Als ich einen Dekorateur schrieb, der es erneut versuchte, selbst wenn ich versagte, bekam ich einen Code wie eine Gehirnübung. Funktionale Anforderungen können angegeben werden, wenn die maximale Anzahl von Versuchen und das Zeitintervall zwischen Versuchen ...
Dann lautet der folgende Code python3.6 +, da er die Zeichenfolge f verwendet.
from functools import wraps
from time import sleep, time
def retry(count=0, delay=0):
def _retry(func):
@wraps(func)
def wrapper(*args, **kwargs):
_delay = delay
_time = time()
for c in range(count):
print(f'time: {time()-_time:.1f}')
success = func(*args, **kwargs)
if success or c == count-1:
break
sleep(_delay)
_delay *= delay
return success
return wrapper
return _retry
try_count = 0
@retry(count=3, delay=1.5)
def unstable_func(threshold):
global try_count
try_count += 1
print(f'try count: {try_count}')
return True if try_count > threshold else False
if __name__ == '__main__':
print(f'unstable_func is {"succeeded" if unstable_func(3) else "failed"}')
print()
print(f'unstable_func is {"succeeded" if unstable_func(3) else "failed"}')
Das Ausführungsergebnis ist
time: 0.0
try count: 1
time: 1.5
try count: 2
time: 3.8
try count: 3
unstable_func is failed
time: 0.0
try count: 4
unstable_func is succeeded
Wenn Sie es tatsächlich verwenden, verwenden Sie eine geeignete Bibliothek!
Recommended Posts