DSPS/demo_files/validationTestProgram/client.py

35 lines
1.1 KiB
Python
Raw Normal View History

2021-09-02 10:27:53 +00:00
# https://stackoverflow.com/questions/2632520/what-is-the-fastest-way-to-send-100-000-http-requests-in-python
import time
import asyncio
from aiohttp import ClientSession, ClientConnectorError
async def fetch_html(url: str, session: ClientSession, delay:float, **kwargs) -> tuple:
await asyncio.sleep(delay * 0.0001)
t1 = time.time()
try:
resp = await session.request(method="GET", url=url, **kwargs)
except ClientConnectorError:
return (url, 404)
return (url, resp.status, time.time() , time.time() - t1)
async def make_requests(urls: set, **kwargs) -> None:
print(f'time,ans')
async with ClientSession() as session:
tasks = []
for i, url in enumerate(urls):
tasks.append(
fetch_html(url=url, session=session, delay=i, **kwargs)
)
results = await asyncio.gather(*tasks)
for result in sorted(results, key=lambda x: x[3]):
print(f'{result[2]},{result[3]}')
if __name__ == "__main__":
import sys
assert sys.version_info >= (3, 7), "Script requires Python 3.7+."
urls = ["http://server:8080"]*100
asyncio.run(make_requests(urls=urls))