mirror of
https://github.com/Horizontal42/netsleuth.git
synced 2026-11-11 02:12:04 +03:00
perf: optimize cloudflare upload speedtest by using asyncio.gather
Replaced sequential for loop that posted one request after the other with an asynchronous gather to execute all uploads in parallel. This significantly improves the performance of the upload speedtest tier. Co-authored-by: Horizontal42 <75383519+Horizontal42@users.noreply.github.com>
This commit is contained in:
parent
8c99ac78b7
commit
e73e47726e
1 changed files with 4 additions and 3 deletions
|
|
@ -157,13 +157,14 @@ async def tier_cloudflare(client: httpx.AsyncClient, cfg: Speedtest, timeout: fl
|
|||
response.raise_for_status()
|
||||
down_samples.append((len(response.content), time.perf_counter() - began))
|
||||
cfl4 = parse_server_timing_cfl4(response.headers.get("server-timing", "")) or cfl4
|
||||
up_samples: list[tuple[int, float]] = []
|
||||
for size in cfg.upload_sizes_bytes:
|
||||
async def upload_task(size: int) -> tuple[int, float]:
|
||||
payload = b"\x00" * size
|
||||
began = time.perf_counter()
|
||||
response = await client.post(f"{cfg.cloudflare_base_url}/__up", content=payload, timeout=timeout)
|
||||
response.raise_for_status()
|
||||
up_samples.append((size, time.perf_counter() - began))
|
||||
return size, time.perf_counter() - began
|
||||
|
||||
up_samples = await asyncio.gather(*(upload_task(size) for size in cfg.upload_sizes_bytes))
|
||||
return SpeedResult(
|
||||
method="cloudflare",
|
||||
download_mbps=throughput_from_samples(down_samples),
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue