This Python code defines a CircuitBreaker class with configurable failure thresholds and timeouts, managing state transitions and callbacks for open, half-open, and closed states.
Project description
pysafecircuit
This Python module provides a CircuitBreaker class that helps in managing failures and timeouts gracefully using the circuit breaker pattern.
Overview
The CircuitBreaker class manages three states:
- CLOSED: Normal operation state where calls are allowed.
- OPEN: Circuit is open due to excessive failures, and calls are blocked.
- HALF_OPEN: After a timeout, the circuit allows a limited number of calls to determine if the underlying service is available.
Dependencies
- threading: For thread synchronization using locks.
- time: For pausing execution between retries.
- datetime and timedelta: For handling timeout calculations.
- typing: For type annotations to specify callback function signatures.
Example Usage
import time
import random
from datetime import datetime, timedelta
from typing import Callable, Optional
from pysafecircuit import CircuitBreaker
def example_function():
# Simulate some operation that may fail
if random.random() < 0.5:
return Exception("an error occurred")
return None
def main():
# Create a new circuit breaker with max_failures=3, timeout=5 seconds, pause_time=1 second, and max_consecutive_successes=2
cb = CircuitBreaker(max_failures=3, timeout=5, pause_time=1, max_consecutive_successes=2)
# Set up the callbacks
cb.set_on_open(lambda: print("Circuit breaker opened!"))
cb.set_on_close(lambda: print("Circuit breaker closed!"))
cb.set_on_half_open(lambda: print("Circuit breaker is half-open, trying again..."))
# Execute the function with circuit breaker protection
for i in range(20):
err = cb.execute(example_function)
if err:
print(f"Attempt {i+1} failed: {err}")
else:
print(f"Attempt {i+1} succeeded")
time.sleep(1) # Simulate some delay between attempts
if __name__ == "__main__":
main()
Features
- State Management: Tracks the state of the circuit (CLOSED, OPEN, HALF_OPEN).
- Callbacks: Allows setting callbacks for when the circuit breaker transitions between states (set_on_open, set_on_close, set_on_half_open).
- Retry Logic: Implements retry logic with configurable parameters (max_failures, timeout, pause_time, max_consecutive_successes).
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pysafecircuit-0.1.1.tar.gz.
File metadata
- Download URL: pysafecircuit-0.1.1.tar.gz
- Upload date:
- Size: 2.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.2 Linux/6.1.0-18-amd64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1f74706df58ce97818f0d3ad9fa5508cad4bac571d1df8cdcc9eeebe8de7db1d
|
|
| MD5 |
58117645031c70780eaed7c77bebff5b
|
|
| BLAKE2b-256 |
9dd679c53c485904e9f1669e6d1dab145d58905534e30be769ff0af4e9ad714d
|
File details
Details for the file pysafecircuit-0.1.1-py3-none-any.whl.
File metadata
- Download URL: pysafecircuit-0.1.1-py3-none-any.whl
- Upload date:
- Size: 4.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.11.2 Linux/6.1.0-18-amd64
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
cd9835594c20f74a8805d5d80c9ccd3a29ae1c70da375fb6bae39d9f1ee60ade
|
|
| MD5 |
80d1459f990dd6adafa38439b7365a5f
|
|
| BLAKE2b-256 |
4ee4e809f9054165227354182dea5d797ae10105c433e5d62e4a42949b4c492a
|