Speedup readexactly by socketpair · Pull Request #395 · python/asyncio (original) (raw)

I have benchmarked that.
8.72 on master branch
6.65 on this branch.

program:

#!/usr/bin/env python3.5

import asyncio import os import time

async def action(rs, chunksize): try: while True: await rs.readexactly(chunksize) except asyncio.IncompleteReadError: pass

async def writer(ws, bufsize): ws.write(b'x' * bufsize) await ws.drain() ws.close()

async def amain(): bufsize = 30 * 1024 * 1024 chunksize = 16

handler = lambda rs, ws: writer(ws, bufsize)
server = await asyncio.start_server(handler, '127.0.0.1', 0)
addr = server.sockets[0].getsockname()
(rs, ws) = await asyncio.open_connection(*addr)
server.close()
await server.wait_closed()
# now writing part is running "in background". TODO: wait it completion somehow

await asyncio.sleep(3)

a = time.monotonic()
await action(rs, chunksize)
b = time.monotonic()
ws.close()
print('chunk size={}: {:.2f} seconds.'.format(
    chunksize,
    b - a,
))

loop = asyncio.get_event_loop() loop.run_until_complete(amain())