A simple util library for creating applications which needs to keep running, despite abnormalities
pip install pyrobustness
Timeout example:
from robust.tools import timeout
@timeout(5)
def very_long_job():
import time
while True:
print("Zzz")
time.sleep(1)
very_long_job()
Retry example:
from robust.tools import retry
@retry(5)
def very_broken_method():
print(".")
raise RuntimeError("Something is broken...")
while True:
very_broken_method()
Circuit Breaker example:
import time
from robust.tools import breaker
counter = 0
@breaker(limit=5, revive=5)
def very_broken_method():
nonlocal counter
if counter <= 5:
counter += 1
raise RuntimeError("Something is broken...")
else:
print("We've made it!")
while True:
try:
very_broken_method()
except RuntimeError:
pass
except Exception:
break
time.sleep(5)
very_broken_method()
- 1.1:
- Additional type for alarm - threading to support Windows OS, or certain cases when signal is not working as supposed
- CircuitBreaker pattern, inspired by speech by Daniel Riti @Pycon 2016
- 1.0: Initial version