[Python-ideas] yield from multiple iterables (was Re: The async API of the future: yield-from)
Christian Tismer
tismer at stackless.com
Sat Oct 20 00:45:15 CEST 2012
s/twi/two/
Sent from my Ei4Steve
On Oct 20, 2012, at 0:31, Christian Tismer <tismer at stackless.com> wrote:
> Hi Guido, Marc, all,
>
> this is a veery promising result, telling
> me that the big Oh can in fact be
> neglected in real applications. 20 for
> twi is good!
>
> I will of course do an analysis and find
> the parameters of the quadratic, but my
> concern is pretty much tamed.
>
> For me that means there will soon be
> a library that contains real generators
> and more building blocks.
>
> I think using those would simplify the
> design of the async API quite a lot.
>
> I suggest to regard current generator
> constructs as low-level helpers for
> Implementing the real concurrency
> building blocks.
>
> Instead of using the existing re.compile("yield (from)?") pattern, I think we can abstract
> from this now and think in terms of
> higher level constructs.
>
> Let's assume generators and coroutines,
> and model concurrency from that. I
> believe this unwinds the brains and
> clarifies things a lot.
>
> I will provide sone classes for that at
> the pycon.de sprint, unless somebody
> implements it earlier (please don't).
>
> This email was written in non-linear
> order, so please ignore logic inversions.
>
> Cheers - chris
>
> Sent from my Ei4Steve
>
> On Oct 19, 2012, at 23:31, Guido van Rossum <guido at python.org> wrote:
>
>> On Fri, Oct 19, 2012 at 2:15 PM, Mark Shannon <mark at hotpy.org> wrote:
>>> On 19/10/12 13:55, Christian Tismer wrote:
>>>>
>>>> Hi Nick,
>>>>
>>>> On 16.10.12 03:49, Nick Coghlan wrote:
>>>>>
>>>>> On Tue, Oct 16, 2012 at 10:44 AM, Greg Ewing
>>>>> <greg.ewing at canterbury.ac.nz> wrote:
>>>>>>
>>>>>> My original implementation of yield-from actually *did* avoid
>>>>>> this, by keeping a C-level pointer chain of yielding-from frames.
>>>>>> But that part was ripped out at the last minute when someone
>>>>>> discovered that it had a detrimental effect on tracebacks.
>>>>>>
>>>>>> There are probably other ways the traceback problem could be
>>>>>> fixed, so maybe we will get this optimisation back one day.
>>>>>
>>>>> Ah, I thought I remembered something along those lines. IIRC, it was a
>>>>> bug report on one of the alphas that prompted us to change it.
>>>>
>>>> I was curious and searched quite a lot.
>>>> It was v3.3.0a1 from 2012-03-15 as a reaction to #14230 and #14220
>>>> from Marc Shannon, patched by Benjamin.
>>>>
>>>> Now I found the original implementation. That looks very much
>>>> as I'm thinking it should be.
>>>>
>>>> Quite a dramatic change which works well, but really seems to remove
>>>> what I would call "now I can emulate most of Stackless" efficiently.
>>>>
>>>> Maybe I should just try to think it would be implemented as before,
>>>> build an abstraction and just use it for now.
>>>>
>>>> I will spend my time at PyCon de for sprinting on "yield from".
>>>
>>> The current implementation may not be much slower than Greg's original
>>> version. One of the main costs of making a call is the creation of a new
>>> frame. But calling into a generator does not need a new frame, so the cost
>>> will be reduced.
>>> Unless anyone has evidence to the contrary :)
>>>
>>> Rather than increasing the performance of this special case, I would suggest
>>> that improving the performance of calls & returns in general would be a more
>>> worthwhile goal.
>>> Calls and returns ought to be cheap.
>>
>> I did a basic timing test using a simple recursive function and a
>> recursive PEP-380 coroutine computing the same value (see attachment).
>> The coroutine version is a little over twice as slow as the function
>> version. I find that acceptable. This went 20 deep, making 2 recursive
>> calls at each level (except at the deepest level).
>>
>> Output on my MacBook Pro:
>>
>> plain 2097151 0.5880069732666016
>> coro. 2097151 1.2958409786224365
>>
>> This was a Python 3.3 built a few days ago from the 3.3 branch.
>>
>> --
>> --Guido van Rossum (python.org/~guido)
>> <p3time.py>
>> _______________________________________________
>> Python-ideas mailing list
>> Python-ideas at python.org
>> http://mail.python.org/mailman/listinfo/python-ideas
> _______________________________________________
> Python-ideas mailing list
> Python-ideas at python.org
> http://mail.python.org/mailman/listinfo/python-ideas
More information about the Python-ideas
mailing list