Skip to main content

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-id in 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:

  1. Setting following env variables:

    • PHY_CONNECT_TIMEOUT : connection timeout in sec
    • PHY_READ_TIMEOUT: read timeout in seconds
    • PHY_MAX_RETRIES: max number of retries for connection failure
    • PHY_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.
  2. parameters in request itself:

    • max_tries(int): overrides PHY_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 GET requests, they will be retried too in case received status is in status_forcelist.
    • status_forcelist: list of http status, retry if the returned status is one of these. default is [500] on GET.
    • timeout: same as timeout in requests
    • backoff_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

  • GET with retry on multiple failure status codes:
import requests
import pyhystrix
pyhystrix.Init()
request.get("http://abc.xyz", status_forcelist=[501, 502, 403])
  • put with retry on response status = 500 or 501
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

  1. OPEN : No requests will be allowed
  2. HALF_OPEN : Only one request will be allowed
  3. CLOSE : All requests will be allowed.

NOTE : State transitions:

CLOSE --> OPEN --> HALF_OPEN --> CLOSE/OPEN

To know more about circuit breaker pattern, click here

Metadata

Release files for pyhystrix 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyhystrix 1.0.0
File Size Uploaded
pyhystrix-1.0.0.tar.gz 7.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyhystrix 1.0.0
File Interpreter ABI Platform
pyhystrix-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 15.8 kB

Release files / pyhystrix-1.0.0.tar.gz

Download URL pyhystrix-1.0.0.tar.gz
Size 7.1 kB
Tags Source
SHA-256 checksum
How to use checksums
5e279136373afbcad9e8a5468f38190a15bcd75212eface80e0cf36d6ca07b8b
BLAKE2b-256 checksum
How to use checksums
c3bf2bc63e0d68a5e6a033932b9d5a723bf71d50d606b6668a4f19012f091124
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

Release files / pyhystrix-1.0.0-py3-none-any.whl

Download URL pyhystrix-1.0.0-py3-none-any.whl
Size 8.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
5ccf7b7e4f6a7da48c5aef11418c51f7dd1c66d9dd4255321967c29518e112f0
BLAKE2b-256 checksum
How to use checksums
828147196ebef948d44fa0c4a526c3e1754b5794b75a6c13b70330f72fc067fd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/40.8.0 requests-toolbelt/0.9.1 tqdm/4.36.1 CPython/3.7.3

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

0.0.3

1 release file

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page