Skip to main content

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pysafecircuit-0.1.1.tar.gz (2.6 kB view details)

Uploaded Source

Built Distribution

pysafecircuit-0.1.1-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

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

Hashes for pysafecircuit-0.1.1.tar.gz
Algorithm Hash digest
SHA256 1f74706df58ce97818f0d3ad9fa5508cad4bac571d1df8cdcc9eeebe8de7db1d
MD5 58117645031c70780eaed7c77bebff5b
BLAKE2b-256 9dd679c53c485904e9f1669e6d1dab145d58905534e30be769ff0af4e9ad714d

See more details on using hashes here.

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

Hashes for pysafecircuit-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 cd9835594c20f74a8805d5d80c9ccd3a29ae1c70da375fb6bae39d9f1ee60ade
MD5 80d1459f990dd6adafa38439b7365a5f
BLAKE2b-256 4ee4e809f9054165227354182dea5d797ae10105c433e5d62e4a42949b4c492a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page