In my experience, for production-grade applications, adding a backoff mechanism is essential. It prevents retrying too rapidly in cases like network failures, which could overwhelm resources.
import time
for i in range(0, 100):
retries = 3
while retries > 0:
try:
# Perform some operation
print(f"Processing {i}")
break # Exit the loop if successful
except SomeException as e:
retries -= 1
print(f"Error on {i}: {e}. Retrying in 2 seconds...")
time.sleep(2) # Wait before retrying
if retries == 0:
print(f"Failed to process {i} after 3 attempts.")
This approach ensures retries are spaced out, which is particularly useful for handling transient issues like network interruptions or rate limits in APIs.