Latency and fault tolerance for distributed systems

Wiliam Souza 9876b39980 Merge pull request #1 from wiliamsouza/feature/metrics %!s(int64=5) %!d(string=hai) anos
docs 4ef00d163e Rename ExecutorMetrics to PoolMetrics and update Poll and PoolMetrics docs %!s(int64=9) %!d(string=hai) anos
hystrix 3800655905 Fix command property initialization %!s(int64=9) %!d(string=hai) anos
tests 5b2c6c16ff Change test class name to py.test stop trying run it %!s(int64=6) %!d(string=hai) anos
.coveragerc 2f73609c19 Add CHANGES.md and .coveragerc %!s(int64=9) %!d(string=hai) anos
.gitignore 015526b3c4 Rename Executor to Pool %!s(int64=9) %!d(string=hai) anos
.travis.yml 508248cba5 Change travis to use tox %!s(int64=6) %!d(string=hai) anos
AUTHORS 8f39438dd3 Added LICENSE and AUTHORS %!s(int64=9) %!d(string=hai) anos
CHANGES.md 2f73609c19 Add CHANGES.md and .coveragerc %!s(int64=9) %!d(string=hai) anos
LICENSE 8f39438dd3 Added LICENSE and AUTHORS %!s(int64=9) %!d(string=hai) anos
MANIFEST.in ba0d7f33d5 Added CHANGES.md to MANIFEST.in %!s(int64=9) %!d(string=hai) anos
Makefile 46ec459ac4 Updated scripts Makefile, tox.ini and setup.py %!s(int64=9) %!d(string=hai) anos
README.md c638e47f09 Updated README add WIP note %!s(int64=9) %!d(string=hai) anos
repos.sh 3a36f32504 Added repos conf script %!s(int64=10) %!d(string=hai) anos
setup.cfg 92435e4896 Initial commit %!s(int64=10) %!d(string=hai) anos
setup.py a77a68da9a Merge branch 'master' into feature/metrics %!s(int64=6) %!d(string=hai) anos
tox.ini aa0b970717 Update tox envlist %!s(int64=6) %!d(string=hai) anos

README.md

hystrix-py

Build Status Coverage Status Documentation Status

A Netflix Hystrix port to Python.

This is a work in progress, please feel free to help!

What is Hystrix?

For more information see the Netflix Hystrix Wiki documentation.

How it works

To know more see the Netflix Hystrix Wiki How it works section documentation.

Features

It's ALPHA version and only support launching a group of commands inside an executor pool.

  • Execute synchronous commands.
  • Execute asynchronous commands.
  • Execute asynchronous commands and attach a callback.

Requirements

It depends on concurrent.futures, new in Python version 3.2 and enum, new in Python version 3.4. It uses futures and enum34 backports to run in Python version 2.7, 3.3 and 3.4.

Installation

Create a virtualenv:

mkproject --python=<fullpath_to_python_3.2+> hystrix-py

Get the code:

git clone https://github.com/wiliamsouza/hystrix-py .

Install it:

python setup.py develop

The last command enter your code in "Development Mode" it creates an egg-link in your virtualenv's site-packages making it available on this environment sys.path. For more info see setuptools development-mode

Development and test dependencies

setup.py will handle test dependencies, to install development use:

pip install -e .[dev]

Tests

python setup.py test

Hello world

Code to be isolated is wrapped inside the run() method of a hystrix.Command similar to the following:

from hystrix import Command

class HelloWorldCommand(Command):
    def run(self):
        return 'Hello World'

This command could be used like this:

command = HelloCommand()

# synchronously
print(command.execute())
'Hello World'

# asynchronously
future = command.queue()
print(future.result())
'Hello Wold'

# callback
def print_result(future)
     print(future.result())

future = command.observe()
future.add_done_callback(print_result)

LICENSE

Copyright 2015 Hystrix Python Authors.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.