Slide 24
Slide 24 text
import random
import time
def exponential_backoff(max_attempts, base_delay, max_delay):
attempts = 0
while attempts < max_attempts:
delay = min(base_delay * 2 ** attempts, max_delay)
jitter = random.uniform(-0.5, 0.5) # ランダムなジッターを追加する
delay_with_jitter = delay * (1 + jitter)
print(f"Attempt: {attempts + 1}, Delay: {delay_with_jitter:.2f} seconds")
time.sleep(delay_with_jitter)
attempts += 1
print("Max attempts reached. Exiting.")
# 例として、最大10回の試行回数、初期遅延1秒、最大遅延10秒として設定します。
max_attempts = 10
base_delay = 1 # 初期遅延
max_delay = 10 # 最大遅延
exponential_backoff(max_attempts, base_delay, max_delay)
Exponential backoff + Jitterのコード例
ChatGPT に生成してもらった例
Attempt: 1, Delay: 0.51 seconds
Attempt: 2, Delay: 2.87 seconds
Attempt: 3, Delay: 4.50 seconds
Attempt: 4, Delay: 8.89 seconds
Attempt: 5, Delay: 5.31 seconds
Attempt: 6, Delay: 8.82 seconds
Attempt: 7, Delay: 12.12 seconds
Attempt: 8, Delay: 9.61 seconds
Attempt: 9, Delay: 6.04 seconds
Attempt: 10, Delay: 8.67 seconds
Attempt: 1, Delay: 0.65 seconds
Attempt: 2, Delay: 2.53 seconds
Attempt: 3, Delay: 5.91 seconds
Attempt: 4, Delay: 11.60 seconds
Attempt: 5, Delay: 10.81 seconds
Attempt: 6, Delay: 14.67 seconds
Attempt: 7, Delay: 11.58 seconds
Attempt: 8, Delay: 11.13 seconds
Attempt: 9, Delay: 5.34 seconds
Attempt: 10, Delay: 7.70 seconds