Backoff is a counter. It starts at min_ms. After every call to duration(),
it is multiplied by factor. It is capped at max_ms.
It returns to min_ms on every call to reset().
jitter adds randomness (see below).
Simple example
from justbackoff import Backoff
b = Backoff(min_ms=100, max_ms=10000, factor=2, jitter=False)
print(b.duration())
print(b.duration())
print(b.duration())
print("Reset!")
b.reset()
print(b.duration())
0.1
0.2
0.4
Reset!
0.1
Example using socket package
import socket
import time
from justbackoff import Backoff
sock = socket.socket()
b = Backoff()
while True:
try:
sock.connect(("127.0.0.1", 1337))
except Exception as e:
d = b.duration()
print("{}, reconnecting in {} seconds".format(e, d))
time.sleep(d)
continue
b.reset()
sock.send("Hello, world!")
sock.close()
justbackoff

A simple backoff algorithm for Python 3.7+.
Install
Usage
Backoff is a counter. It starts at
min_ms. After every call toduration(), it is multiplied byfactor. It is capped atmax_ms. It returns tomin_mson every call toreset().jitteradds randomness (see below).Simple example
Example using
socketpackageExample using
jitterEnabling
jitteradds some randomization to the backoff durations. See Amazon’s writeup of performance gains using jitter. Seeding is not necessary but doing so gives repeatable results.Credits
Ported from Go backoff