Fun with IO

AAKASH JANA aakashjana2002 at gmail.com
Tue Jan 21 15:04:20 EST 2020


i have been fairly confused as to what would be the best option for an all
in all python compiler (i am talking the cpython , number type compiler) to
use for basic projects. Like sorting and searching algorithms to be
replicated without use of any builtins. Please help

On Tue, 21 Jan 2020, 9:52 pm Maxime S <maxischmeii at gmail.com wrote:

> Hi,
>
> Le ven. 17 janv. 2020 à 20:11, Frank Millman <frank at chagford.com> a écrit
> :
>
>
> > It works perfectly. However, some pdf's can be large, and there could be
> > concurrent requests, so I wanted to minimise the memory footprint. So I
> > tried passing the client_writer directly to the handler -
> >
> >      await pdf_handler(client_writer)
> >      client_writer.write(b'\r\n')
> >
> > It works! ReportLab accepts client_writer as a file-like object, and
> > writes to it directly. I cannot use chunking, so I just let it do its
> > thing.
> >
> > Can anyone see any problem with this?
> >
> >
> If the socket is slower than the PDF generation (which is probably always
> the case, unless you have a very fast network), it will still have to be
> buffered in memory (in this case in the writer buffer). Since writer.write
> is non-blocking but is not a coroutine, it has to buffer. There is an
> interesting blog post about that here that I recommend reading:
> https://lucumr.pocoo.org/2020/1/1/async-pressure/
>
> Unfortunately, there is no way to avoid buffering the entire pdf in memory
> without modifying reportlab to make it async-aware.
>
> This version is still better than the one with BytesIO though because in
> that version the pdf was buffered twice, once in BytesIO and once in the
> writer, although you can fix that by using await writer.drain() after each
> write and then the two versions are essentially equivalent.
>
> Regards,
>
> Maxime.
> --
> https://mail.python.org/mailman/listinfo/python-list
>


More information about the Python-list mailing list