Skip to content
This repository was archived by the owner on Nov 23, 2017. It is now read-only.
This repository was archived by the owner on Nov 23, 2017. It is now read-only.

Serious performance loss (10 times) when NOT using .drain() #338

Description

@socketpair

Linux Ubuntu 16.04, Python 3.5, standard asyncio library.

#!/usr/bin/env python3.5importasyncioimportosasyncdeftest_read_arch(rs):
whileTrue:
d=awaitrs.read(65536)
ifnotd:
breakasyncdeftest_write_arch(ws):
b=b'x'* (1024*1024)
foriinrange(30):
ws.write(b)
# await ws.drain() # <----------------- uncomment to speed program for 10 times (!)awaitws.drain() # ensure everything is really written before closing.ws.close()
asyncdefconnect_write_pipe(file):
loop=asyncio.get_event_loop()
transport, protocol=awaitloop.connect_write_pipe(asyncio.streams.FlowControlMixin, file)
stream_writer=asyncio.StreamWriter(transport, protocol, None, loop)
returnstream_writer, transportasyncdefconnect_read_pipe(file):
loop=asyncio.get_event_loop()
stream_reader=asyncio.StreamReader()
transport, protocol=awaitloop.connect_read_pipe(lambda: asyncio.StreamReaderProtocol(stream_reader), file)
returnstream_reader, transportasyncdefamain():
(r, w) =os.pipe()
stream_reader, rtransport=awaitconnect_read_pipe(open(r, 'rb'))
stream_writer, wtransport=awaitconnect_write_pipe(open(w, 'wb'))
awaitasyncio.gather(
test_write_arch(stream_writer),
test_read_arch(stream_reader),
)
wtransport.close()
rtransport.close()
defmain():
loop=asyncio.get_event_loop()
loop.run_until_complete(amain())
if__name__=='__main__':
main()

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions