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())