Last active
December 2, 2018 23:39
-
-
Save peterbe/af51fde2a7ed2c2bdf0a3e5b0d6e3e5b to your computer and use it in GitHub Desktop.
Related to this blog post: https://www.peterbe.com/plog/comparing-keycdn-and-digitaloceans-new-spaces-cdn
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
102650_300x300.jpg | |
105101_300x300.jpg | |
105819_300x300.jpg | |
106854_300x300.jpg | |
108064_300x300.jpg | |
109025_300x300.jpg | |
10951_300x300.jpg | |
109964_300x300.jpg | |
111227_300x300.jpg | |
111676_300x300.jpg | |
112043_300x300.jpg | |
11221_300x300.jpg | |
117051_300x300.jpg | |
118759_300x300.jpg | |
121315_300x300.jpg | |
127933_300x300.jpg | |
128191_300x300.jpg | |
1282_300x300.jpg | |
129233_300x300.jpg | |
130507_300x300.jpg | |
131604_300x300.jpg | |
13539_300x300.jpg | |
135923_300x300.jpg | |
138155_300x300.jpg | |
139244_300x300.jpg | |
139864_300x300.jpg | |
140465_300x300.jpg | |
143483_300x300.jpg | |
144380_300x300.jpg | |
144784_300x300.jpg | |
145106_300x300.jpg | |
145604_300x300.jpg | |
148145_300x300.jpg | |
149452_300x300.jpg | |
149595_300x300.jpg | |
151289_300x300.jpg | |
152032_300x300.jpg | |
153984_300x300.jpg | |
15463_300x300.jpg | |
155556_300x300.jpg | |
156771_300x300.jpg | |
1583_300x300.jpg | |
158918_300x300.jpg | |
163185_300x300.jpg | |
163569_300x300.jpg | |
164404_300x300.jpg | |
165171_300x300.jpg | |
167893_300x300.jpg | |
169434_300x300.jpg | |
169515_300x300.jpg | |
170571_300x300.jpg | |
170630_300x300.jpg | |
170763_300x300.jpg | |
171011_300x300.jpg | |
172008_300x300.jpg | |
172272_300x300.jpg | |
17312_300x300.jpg | |
175127_300x300.jpg | |
175909_300x300.jpg | |
179119_300x300.jpg | |
180592_300x300.jpg | |
181053_300x300.jpg | |
183495_300x300.jpg | |
18614_300x300.jpg | |
187254_300x300.jpg | |
188134_300x300.jpg | |
188201_300x300.jpg | |
191496_300x300.jpg | |
191666_300x300.jpg | |
19242_300x300.jpg | |
193766_300x300.jpg | |
194123_300x300.jpg | |
201751_300x300.jpg | |
203968_300x300.jpg | |
207963_300x300.jpg | |
208005_300x300.jpg | |
208622_300x300.jpg | |
210096_300x300.jpg | |
211135_300x300.jpg | |
212218_300x300.jpg | |
213696_300x300.jpg | |
215447_300x300.jpg | |
21563_300x300.jpg | |
216408_300x300.jpg | |
221871_300x300.jpg | |
225720_300x300.jpg | |
225828_300x300.jpg | |
228546_300x300.jpg | |
230876_300x300.jpg | |
231098_300x300.jpg | |
235585_300x300.jpg | |
238068_300x300.jpg | |
238589_300x300.jpg | |
242471_300x300.jpg | |
246111_300x300.jpg | |
247470_300x300.jpg | |
248681_300x300.jpg | |
250388_300x300.jpg | |
251217_300x300.jpg | |
251221_300x300.jpg | |
251588_300x300.jpg | |
252450_300x300.jpg | |
255198_300x300.jpg | |
25837_300x300.jpg | |
264036_300x300.jpg | |
268489_300x300.jpg | |
26962_300x300.jpg | |
270124_300x300.jpg | |
276189_300x300.jpg | |
27890_300x300.jpg | |
279111_300x300.jpg | |
28019_300x300.jpg | |
280577_300x300.jpg | |
281161_300x300.jpg | |
28116_300x300.jpg | |
284778_300x300.jpg | |
284922_300x300.jpg | |
287498_300x300.jpg | |
29882_300x300.jpg | |
322959_300x300.jpg | |
323256_300x300.jpg | |
331210_300x300.jpg | |
335717_300x300.jpg | |
338066_300x300.jpg | |
356737_300x300.jpg | |
359843_300x300.jpg | |
36240_300x300.jpg | |
38856_300x300.jpg | |
393268_300x300.jpg | |
393584_300x300.jpg | |
399099_300x300.jpg | |
402804_300x300.jpg | |
404686_300x300.jpg | |
407914_300x300.jpg | |
41074_300x300.jpg | |
411690_300x300.jpg | |
415125_300x300.jpg | |
42076_300x300.jpg | |
427479_300x300.jpg | |
430879_300x300.jpg | |
431738_300x300.jpg | |
433539_300x300.jpg | |
44072_300x300.jpg | |
44745_300x300.jpg | |
450736_300x300.jpg | |
450824_300x300.jpg | |
45153_300x300.jpg | |
45598_300x300.jpg | |
45607_300x300.jpg | |
45801_300x300.jpg | |
46138_300x300.jpg | |
471378_300x300.jpg | |
476149_300x300.jpg | |
47706_300x300.jpg | |
47775_300x300.jpg | |
485512_300x300.jpg | |
489627_300x300.jpg | |
494475_300x300.jpg | |
495164_300x300.jpg | |
496375_300x300.jpg | |
497545_300x300.jpg | |
499247_300x300.jpg | |
499889_300x300.jpg | |
50375_300x300.jpg | |
51221_300x300.jpg | |
52071_300x300.jpg | |
52502_300x300.jpg | |
52535_300x300.jpg | |
535535_300x300.jpg | |
54370_300x300.jpg | |
544121_300x300.jpg | |
5447_300x300.jpg | |
551373_300x300.jpg | |
558843_300x300.jpg | |
569924_300x300.jpg | |
572033_300x300.jpg | |
5735_300x300.jpg | |
57979_300x300.jpg | |
580719_300x300.jpg | |
583134_300x300.jpg | |
585864_300x300.jpg | |
586847_300x300.jpg | |
588417_300x300.jpg | |
588496_300x300.jpg | |
589104_300x300.jpg | |
589127_300x300.jpg | |
589754_300x300.jpg | |
589836_300x300.jpg | |
594254_300x300.jpg | |
59613_300x300.jpg | |
596644_300x300.jpg | |
597869_300x300.jpg | |
599759_300x300.jpg | |
59979_300x300.jpg | |
601483_300x300.jpg | |
601593_300x300.jpg | |
606775_300x300.jpg | |
608848_300x300.jpg | |
610160_300x300.jpg | |
613331_300x300.jpg | |
614490_300x300.jpg | |
616733_300x300.jpg | |
617154_300x300.jpg | |
619275_300x300.jpg | |
619531_300x300.jpg | |
620114_300x300.jpg | |
627980_300x300.jpg | |
629681_300x300.jpg | |
629740_300x300.jpg | |
630092_300x300.jpg | |
632586_300x300.jpg | |
636831_300x300.jpg | |
637408_300x300.jpg | |
637783_300x300.jpg | |
637818_300x300.jpg | |
639620_300x300.jpg | |
639879_300x300.jpg | |
640683_300x300.jpg | |
648854_300x300.jpg | |
65456_300x300.jpg | |
656960_300x300.jpg | |
657099_300x300.jpg | |
658119_300x300.jpg | |
658478_300x300.jpg | |
658644_300x300.jpg | |
660454_300x300.jpg | |
660708_300x300.jpg | |
662764_300x300.jpg | |
664428_300x300.jpg | |
665697_300x300.jpg | |
66676_300x300.jpg | |
673742_300x300.jpg | |
676293_300x300.jpg | |
680009_300x300.jpg | |
681580_300x300.jpg | |
684374_300x300.jpg | |
68467_300x300.jpg | |
684806_300x300.jpg | |
685320_300x300.jpg | |
688502_300x300.jpg | |
689608_300x300.jpg | |
693029_300x300.jpg | |
694704_300x300.jpg | |
696244_300x300.jpg | |
698597_300x300.jpg | |
70159_300x300.jpg | |
706945_300x300.jpg | |
708256_300x300.jpg | |
710113_300x300.jpg | |
710652_300x300.jpg | |
71072_300x300.jpg | |
71309_300x300.jpg | |
715435_300x300.jpg | |
71560_300x300.jpg | |
715918_300x300.jpg | |
72677_300x300.jpg | |
73527_300x300.jpg | |
736539_300x300.jpg | |
74087_300x300.jpg | |
75124_300x300.jpg | |
7680_300x300.jpg | |
78371_300x300.jpg | |
81234_300x300.jpg | |
815_300x300.jpg | |
8404_300x300.jpg | |
86254_300x300.jpg | |
86310_300x300.jpg | |
87142_300x300.jpg | |
88744_300x300.jpg | |
90414_300x300.jpg | |
91293_300x300.jpg | |
91763_300x300.jpg | |
91792_300x300.jpg | |
9313_300x300.jpg | |
93707_300x300.jpg | |
93861_300x300.jpg | |
94740_300x300.jpg | |
95718_300x300.jpg | |
97168_300x300.jpg | |
9805_300x300.jpg | |
98694_300x300.jpg | |
99520_300x300.jpg | |
guetzlied.json | |
mozjpeged.json |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import csv | |
import time | |
import random | |
import statistics | |
from collections import defaultdict | |
from urllib.parse import urlparse | |
import requests | |
images = [] | |
with open("images.txt") as c: | |
for line in c: | |
if line.strip().endswith(".jpg"): | |
images.append(line.strip()) | |
base1 = "https://songsearch-2916.kxcdn.com/static/albums/2017/05/24/08/" | |
base2 = ( | |
"https://songsearch.nyc3.cdn.digitaloceanspaces.com/images/albums/2017/05/24/08/" | |
) | |
def fmt(s): | |
return "{:.3f}s".format(s).ljust(10) | |
def print_stats(numbers): | |
print("DOMAIN".ljust(50), "MEDIAN".ljust(10), "MEAN") | |
for domain, times in numbers.items(): | |
print( | |
domain.ljust(50), fmt(statistics.median(times)), fmt(statistics.mean(times)) | |
) | |
length = len(times) | |
print(format(length, ","), "iterations.") | |
print("\n") | |
def run(*args): | |
seconds = int(args[0]) | |
numbers = defaultdict(list) | |
try: | |
with open("./results.csv") as f: | |
reader = csv.reader(f) | |
for row in reader: | |
domain, took, status = row | |
took = float(took) | |
status = int(status) | |
if status == 200: | |
numbers[domain].append(took) | |
else: | |
print("STATUS CODE", domain, r.status_code) | |
print_stats(numbers) | |
except FileNotFoundError: | |
pass | |
try: | |
while True: | |
image = random.choice(images) | |
urls = [base1 + image, base2 + image] | |
random.shuffle(urls) | |
for url in urls: | |
t0 = time.time() | |
r = requests.get(url) | |
t1 = time.time() | |
domain = urlparse(url).netloc | |
res = "{}{:.4f}\t{}".format(domain.ljust(50), t1 - t0, r.status_code) | |
print(res) | |
with open("./results.csv", "a") as f: | |
writer = csv.writer(f) | |
writer.writerow([domain, t1 - t0, r.status_code]) | |
if r.status_code == 200: | |
numbers[domain].append(t1 - t0) | |
else: | |
print("STATUS CODE", domain, r.status_code) | |
print() | |
time.sleep(seconds) | |
except KeyboardInterrupt: | |
print() | |
print_stats(numbers) | |
if __name__ == "__main__": | |
import sys | |
sys.exit(run(*sys.argv[1:])) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
To run:
requests
installed.python run.py 10
Ctrl-C
Look at the output and expect to see something like this: