On Fri, Feb 21, 2020 at 12:43 AM Steven D'Aprano <st...@pearwood.info>
wrote:

> On Thu, Feb 20, 2020 at 02:19:13PM -0800, Stephan Hoyer wrote:
>
> > > > Strong +1 for an array.zeros() constructor, and/or a lower level
> > > array.empty() which doesn't pre-fill values.
> > >
> > > So it'd be a shorthand for something like this?
> > >
> > > >>> array.array("i", bytes(64))
> > > array('i', [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
> > >
> > > It'd be convenient to specify the size as a number of array elements
> > > rather than bytes. But I'm not a heavy user of array.array() so I
> > > won't say either way as to whether this is needed.
> >
> >
> > Yes, exactly.
> >
> > The main problem with array.array("i", bytes(64)) is that memory gets
> > allocated twice, first to create the bytes() object and then to make the
> > array(). This makes it unsuitable for high performance applications.
>
> Got some actual measurements to demonstrate that initialising the array
> is a bottleneck? Especially for something as small as 64, it seems
> unlikely. If it were 64MB, that might be another story.
>

That's right, the real use-case is quickly deserializing large amounts of
data (e.g., 100s of MB) from a wire format into a form suitable for fast
analysis with NumPy or pandas. Unfortunately I can't share an actual code
example, but this is a pretty common scenario in the data processing world,
e.g., reminiscent of the use-cases for PEP 574 (
https://www.python.org/dev/peps/pep-0574/).

The concern is not just speed (which I agree is probably not impacted too
poorly by an extra copy) but also memory overhead. If the resulting array
is 500 MB and deserialization can be done in a streaming fashion, I don't
want to wastefully allocate another 500 MB just to do a memory copy.
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/HCXGQEOG5HWTQLY6T6A7JTKBJJXN2AZE/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to