Skip to content

Commit

Permalink
Add asyncio_tcp benchmark (#254)
Browse files Browse the repository at this point in the history
  • Loading branch information
kumaraditya303 authored Dec 23, 2022
1 parent 340008c commit b3c5e70
Show file tree
Hide file tree
Showing 3 changed files with 54 additions and 0 deletions.
1 change: 1 addition & 0 deletions pyperformance/data-files/benchmarks/MANIFEST
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ async_tree <local>
async_tree_cpu_io_mixed <local:async_tree>
async_tree_io <local:async_tree>
async_tree_memoization <local:async_tree>
asyncio_tcp <local>
concurrent_imap <local>
coroutines <local>
coverage <local>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[project]
name = "pyperformance_bm_asyncio_tcp"
requires-python = ">=3.8"
dependencies = ["pyperf"]
urls = {repository = "https://github.com/python/pyperformance"}
dynamic = ["version"]

[tool.pyperformance]
name = "asyncio_tcp"
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
"""
Benchmark for asyncio TCP server and client performance
transferring 10MB of data.
Author: Kumar Aditya
"""


import asyncio
from pyperf import Runner


CHUNK_SIZE = 1024 ** 2 * 10


async def handle_echo(reader: asyncio.StreamReader,
writer: asyncio.StreamWriter) -> None:
data = b'x' * CHUNK_SIZE
for _ in range(100):
writer.write(data)
await writer.drain()
writer.close()
await writer.wait_closed()


async def main() -> None:
server = await asyncio.start_server(handle_echo, '127.0.0.1', 8882)

async with server:
asyncio.create_task(server.start_serving())
reader, writer = await asyncio.open_connection('127.0.0.1', 8882)
data_len = 0
while True:
data = await reader.read(CHUNK_SIZE)
if not data:
break
data_len += len(data)
assert data_len == CHUNK_SIZE * 100
writer.close()
await writer.wait_closed()

if __name__ == '__main__':
runner = Runner()
runner.bench_async_func('asyncio_tcp', main)

0 comments on commit b3c5e70

Please sign in to comment.