Skip to content

Commit 30f9e0c

Browse files
committed
speed test for web app
1 parent 824ff10 commit 30f9e0c

File tree

4 files changed

+69
-1
lines changed

4 files changed

+69
-1
lines changed

apps/py/.idea/dictionaries/screencaster.xml

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/py/.idea/py.iml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

apps/py/ch07_web/speed_test.py

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import datetime
2+
3+
import warnings
4+
import contextlib
5+
6+
import requests
7+
from urllib3.exceptions import InsecureRequestWarning
8+
9+
10+
def main():
11+
url = input("What's the URL? ").strip()
12+
times = int(input("How many rounds <num>? "))
13+
14+
print(f"Running timing against {url}, {times} times.")
15+
total_time = 0.0
16+
with no_ssl_verification():
17+
with requests.Session() as session:
18+
for _ in range(0, times):
19+
t0 = datetime.datetime.now()
20+
21+
resp = session.get(url)
22+
resp.raise_for_status()
23+
resp.close()
24+
25+
dt = datetime.datetime.now() - t0
26+
total_time += dt.total_seconds()
27+
28+
print(f"Done in {total_time * 1000:.3f}, that's {total_time / times * 1000:.3f} ms on average.")
29+
30+
31+
old_merge_environment_settings = requests.Session.merge_environment_settings
32+
33+
34+
@contextlib.contextmanager
35+
def no_ssl_verification():
36+
opened_adapters = set()
37+
38+
def merge_environment_settings(self, url, proxies, stream, verify, cert):
39+
# Verification happens only once per connection so we need to close
40+
# all the opened adapters once we're done. Otherwise, the effects of
41+
# verify=False persist beyond the end of this context manager.
42+
opened_adapters.add(self.get_adapter(url))
43+
44+
settings = old_merge_environment_settings(self, url, proxies, stream, verify, cert)
45+
settings['verify'] = False
46+
47+
return settings
48+
49+
requests.Session.merge_environment_settings = merge_environment_settings
50+
51+
try:
52+
with warnings.catch_warnings():
53+
warnings.simplefilter('ignore', InsecureRequestWarning)
54+
yield
55+
finally:
56+
requests.Session.merge_environment_settings = old_merge_environment_settings
57+
58+
for adapter in opened_adapters:
59+
try:
60+
adapter.close()
61+
except:
62+
pass
63+
64+
65+
if __name__ == '__main__':
66+
main()

apps/py/requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ bs4
44
httpx
55
flask
66
sqlalchemy
7+
requests

0 commit comments

Comments
 (0)