Skip to main content

Usable Circuit Breaker pattern implementation

Project description

https://travis-ci.org/elemepi/breakers.svg?branch=master

Usable Circuit Breaker pattern implementation.

Install

$ pip install breakers

Usage

import functools
from breakers import Breaker

def circuit_breaker(time_span=20000, unit=1000, calls_limit=10,
                    error_limit=0.5, retry_time=10000):
    def deco(func):
        # Create breaker
        if not hasattr(func, '__breaker__'):
            func.__breaker__ = Breaker(time_span, unit, calls_limit,
                                       error_limit, retry_time)
        breaker = func.__breaker__

        @functools.wraps(func)
        def wraps(*args, **kwargs):
            if not breaker.is_allow():
                raise RuntimeError('Circuit breaker')

            exc = None
            try:
                return func(*args, **kwargs)
            except Exception as e:
                exc = e
                raise
            finally:
                if exc:
                    breaker.add_failure(1)
                else:
                    breaker.add_success(1)
        return wraps
    return deco

@circuit_breaker()
def f():
    import random
    if random.randint(1, 4) in (1, 2):
        raise ValueError
    return 'succeed'

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

breakers-0.1.0.tar.gz (3.3 kB view hashes)

Uploaded Source

Built Distribution

breakers-0.1.0-py2.py3-none-any.whl (5.4 kB view hashes)

Uploaded Python 2 Python 3

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