Skip to content

Instantly share code, notes, and snippets.

@bityob
Last active July 29, 2021 12:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bityob/02b1a823b478ad74a8440b86f95e13a6 to your computer and use it in GitHub Desktop.
Save bityob/02b1a823b478ad74a8440b86f95e13a6 to your computer and use it in GitHub Desktop.
Requests latency test v2.26 vs v.25.1

Run httpbin locally

docker pull kennethreitz/httpbin
docker run -d -p 8888:80 kennethreitz/httpbin

Clone this gist

git clone https://gist.github.com/02b1a823b478ad74a8440b86f95e13a6.git requests-latency-test
cd requests-latency-test

Run tests without environments variables

docker build . --build-arg REQUESTS_VERSION=2.26 --build-arg ENV_COUNT=0 -t test && docker run --network "host" test

requests-2.26-env-count-0-result.png

docker build . --build-arg REQUESTS_VERSION=2.25.1 --build-arg ENV_COUNT=0 -t test && docker run --network "host" test

requests-2.25.1-env-count-0-result.png

Run tests with 500 environments variables

docker build . --build-arg REQUESTS_VERSION=2.26 --build-arg ENV_COUNT=500 -t test && docker run --network "host" test

requests-2.26-env-count-500-result.png

docker build . --build-arg REQUESTS_VERSION=2.25.1 --build-arg ENV_COUNT=500 -t test && docker run --network "host" test

requests-2.25.1-env-count-500-result.png

*.sh text eol=lf
FROM python
ARG REQUESTS_VERSION
RUN pip install requests==${REQUESTS_VERSION}
ARG ENV_COUNT
ENV ENV_COUNT ${ENV_COUNT}
WORKDIR /
COPY . .
ENTRYPOINT ["bash", "/run.sh"]
# Current requests
echo "Requests version: " $(pip freeze | grep requests==)
echo "Env count: " ${ENV_COUNT}
python /test.py
import requests
import timeit
import os
ENV_COUNT = int(os.environ['ENV_COUNT'])
# Set env
print(f"Seting environment variables... {ENV_COUNT}")
for i in range(ENV_COUNT):
os.environ[f"ENV_{i}"] = str(i)
print("Creating requests session...")
sess = requests.session()
def bench():
# httpbin locally
# docker pull kennethreitz/httpbin
# docker run -p 8888:80 kennethreitz/httpbin
r = sess.get("http://localhost:8888/json", verify=False)
r.content
print("Starting test...")
result = timeit.timeit(bench, number=10000)
print(f"Done, toke {result} seconds")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment