pyhystrix
pyhystrix copied to clipboard
Hystrix brought to Python
pyhystrix
A library to patch requests package in order to add following functionalities by default:
- Connection and Read timeouts
- Retries on connection failure
- Circuitbreaking
- Adding unique
x-request-idin request header if not provided
NOTE:: 0.0.2 supports python2.7 and >= 0.0.3 supports python3 only.
Installation
pip3 install pyhystrix
Usage
Before making any request, just call Init():
import requests
import pyhystrix
requests.get("http://abc.xyx") // No functionalities of pyhystrix
pyhystrix.Init()
requests.get("http://abc.xyx") // pyhystrix is attached to all requests
Default Configurations can be changed in 2 ways:
-
Setting following env variables:
PHY_CONNECT_TIMEOUT: connection timeout in secPHY_READ_TIMEOUT: read timeout in secondsPHY_MAX_RETRIES: max number of retries for connection failurePHY_CIRCUIT_FAIL_THRESHOLD: Number of failed requests after which circuit will be open and further requests on the same url will not be allowed.PHY_CIRCUIT_ALIVE_THRESHOLD: Number of failed requests on open circuit to make it half_open (Described below)PHY_CIRCUIT_DELAY: Number of seconds after which open circuit will be half_open.
-
parameters in request itself:
max_tries(int): overridesPHY_MAX_RETRIES, some rules related to it are follows:max_tries=0: will cause no retries, fail on first failure.- If a positive value is passed for non
GETrequests, they will be retried too in case received status is instatus_forcelist.
status_forcelist: list of http status, retry if the returned status is one of these. default is[500]onGET.timeout: same as timeout in requestsbackoff_factor: delay in each retry will be affected by this using following formula:{backoff factor} * (2 ^ ({number of total retries} - 1)). Default =0.5sec
More Examples
GETwith retry on multiple failure status codes:
import requests
import pyhystrix
pyhystrix.Init()
request.get("http://abc.xyz", status_forcelist=[501, 502, 403])
putwith retry on response status =500or501
request.put("http://abc.xyz", max_tries=3, status_forcelist=[500, 502])
NOTE: All type of requests will be retried in case of ConnectionError
Circuit Breaker States
- OPEN : No requests will be allowed
- HALF_OPEN : Only one request will be allowed
- CLOSE : All requests will be allowed.
NOTE : State transitions:
CLOSE --> OPEN --> HALF_OPEN --> CLOSE/OPEN