You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
39 lines
868 B
39 lines
868 B
import asyncio |
|
import sys |
|
import time |
|
|
|
import aiohttp |
|
import uvloop |
|
|
|
|
|
async def do_req(sesh, url): |
|
async with sesh.get(url, allow_redirects=False) as resp: |
|
assert resp.status == 302 |
|
|
|
|
|
async def main(): |
|
if len(sys.argv) < 2: |
|
exit("usage: python performance.py <url>") |
|
url = sys.argv[1] |
|
async with aiohttp.ClientSession() as sesh: |
|
await do_req(sesh, url) |
|
|
|
await asyncio.sleep(1) |
|
|
|
tasks = [] |
|
for i in range(10000): |
|
tasks.append(do_req(sesh, url)) |
|
|
|
# aaand liftoff! |
|
before = time.time() |
|
await asyncio.gather(*tasks) |
|
after = time.time() |
|
|
|
return after - before |
|
|
|
uvloop.install() |
|
t = asyncio.run(main()) |
|
|
|
print(f"completed 10k requests in {t:.4f} seconds") |
|
if t > 10: |
|
print('if that was a redirect endpoint something seems off here. go optimize performance')
|
|
|