[Python-ideas] The async API of the future: yield-from

Greg Ewing greg.ewing at canterbury.ac.nz
Mon Oct 15 09:37:55 CEST 2012


Guido van Rossum wrote:
> But, as Christian Tismer wrote, we need to have some kind of idea of
> what the primitives are that we want to support.

Well, I was just responding to your asking what the yield-from
equivalent would be to the corresponding thing using Futures.
I assumed from the fact that you asked that it was something
Futures-using people like to do a lot, so it would be worth
putting into a library.

There may be other ways to approach it, though. Suppose we
had a primitive that just waits for a single task to finish
and returns its value. Then we could do this:

    def par(*tasks):
      for task in tasks:
         scheduler.schedule(task)
      return [yield from scheduler.wait_for(task) for task in tasks]

That's straightforward enough that maybe it doesn't even need
to be a library function, just a well-known pattern.

> Maybe you meant condition variable? It looks like threading.Condition
> with notify_all().

Something like that -- the terminology probably varies a bit
from one library to another. The basic concept is "set of
tasks waiting for some condition to become true".

> Anyway, I agree we need some primitives like these, but I'm not sure
> how to choose the set of essentials.

I think that most, maybe all, of the standard synchronisation
mechanisms, like mutexes and semaphores, can be built out of the
primitives I've already introduced -- essentially just block()
and yield. So anything of this kind that we provide will be more
in the way of convenience features than essential primitives.

-- 
Greg



More information about the Python-ideas mailing list