Hi Ludovic,
Le 22/10/2017 à 18:51, Ludovic Gasc a écrit :
To my understanding, some AsyncIO libraries, like aiohttp, don't
use Streams API of AsyncIO and implement a specific implementation,
especially to have a full control on the buffers: based on the
information provided inside the protocol, you are able to know if a
small payload or a big payload will arrive on the wire, like
Content-Length header with HTTP.
My question is: Do you think it's possible to have a simple API to fit
at the same time small payloads and big payloads, without impacts on
efficiency for all use cases ?
On the write side: I think it's always possible, as my PR for Tornado
shows (*). You "just" have to implement a smart buffer management scheme.
(*) https://github.com/tornadoweb/tornado/pull/2169
On the read side: you need a readinto()-like API for large buffers.
Small buffers can still use a read()-like API for convenience. That
means a bit of complication to switch from one mode to the other
internally, but it looks doable.
On the topic of asyncio, however, asyncio Streams are currently layered
over the Transport / Protocol abstraction, and the data_received()
paradigm means data is *already* copied at least once when read from the
socket to a bytes object whose length isn't controlled by the
application, so it's a lot battle unless Streams are reimplemented
differently.
Regards
Antoine.
_______________________________________________
Async-sig mailing list
[email protected]
https://mail.python.org/mailman/listinfo/async-sig
Code of Conduct: https://www.python.org/psf/codeofconduct/