[Python-Dev] cpython: Issue #22003: When initialized from a bytes object, io.BytesIO() now

Serhiy Storchaka storchaka at gmail.com
Wed Jul 30 21:48:52 CEST 2014


30.07.14 16:59, Antoine Pitrou написав(ла):
>
> Le 30/07/2014 02:11, Serhiy Storchaka a écrit :
>> 30.07.14 06:59, Serhiy Storchaka написав(ла):
>>> 30.07.14 02:45, antoine.pitrou написав(ла):
>>>> http://hg.python.org/cpython/rev/79a5fbe2c78f
>>>> changeset:   91935:79a5fbe2c78f
>>>> parent:      91933:fbd104359ef8
>>>> user:        Antoine Pitrou <solipsis at pitrou.net>
>>>> date:        Tue Jul 29 19:41:11 2014 -0400
>>>> summary:
>>>>    Issue #22003: When initialized from a bytes object, io.BytesIO() now
>>>> defers making a copy until it is mutated, improving performance and
>>>> memory use on some use cases.
>>>>
>>>> Patch by David Wilson.
>>>
>>> Did you compare this with issue #15381 [1]?
>
> Not really, but David's patch is simple enough and does a good job of
> accelerating the read-only BytesIO case.

Ignoring tests and comments my patch adds/removes/modifies about 200 
lines, and David's patch -- about 150 lines of code. But it's __sizeof__ 
looks not correct, correcting it requires changing about 50 lines. In 
sum the complexity of both patches is about equal.

>> $ ./python -m timeit -s 'import i' 'i.readlines()'
>>
>> Before patch: 10 loops, best of 3: 46.9 msec per loop
>> After issue22003 patch: 10 loops, best of 3: 36.4 msec per loop
>> After issue15381 patch: 10 loops, best of 3: 27.6 msec per loop
>
> I'm surprised your patch does better here. Any idea why?

I didn't look at David's patch too close yet. But my patch includes 
optimization for end-of-line scanning.




More information about the Python-Dev mailing list