mirror of https://github.com/Askill/DSPS.git
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
# 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))
|