[issue20578] BufferedIOBase.readinto1 is missing

Nikolaus Rath report at bugs.python.org
Mon Apr 14 03:58:19 CEST 2014


Nikolaus Rath added the comment:

Here's a little script to estimate the performance difference between using read1 and readinto1 to read large amounts of data. On my system, I get:

C readinto1: 4.960e-01 seconds
C read1: 4.055e-01 seconds
Python readinto1: 1.066e+00 seconds
Python read1: 2.565e+00 seconds

In other words, _pyio.BufferedReader.readinto1 is more than a factor of 2 faster than _pyio.BufferedReader.read1 and io.readinto1 is faster than io.read1 by about 20%.


On its own, I think this would justify keeping an implementation of readinto1 in _pyio.BufferedReader instead of falling back on the default (that is implemented using read1). However, I believe that people who need performance are probably not using _pyio but io, so *my* argument for keeping it implemented in _pyio is to keep the implementations similiar.

I found studying _pyio very helpful to understand the C code in io. If we implement BufferedReader.readinto1 in io, but not in _pyio.BufferedReader, this advantage would be reduced.


That said, I am primary interested in getting readinto1 into io. So I'm happy to either extend the patch to also provide a fast readinto implementation for _pyio (to align it with io), or to remove the readinto1 implementation in _pyio.

----------
Added file: http://bugs.python.org/file34811/benchmark.py

_______________________________________
Python tracker <report at bugs.python.org>
<http://bugs.python.org/issue20578>
_______________________________________


More information about the Python-bugs-list mailing list