[Python-ideas] The async API of the future: yield-from
Guido van Rossum
guido at python.org
Wed Oct 17 16:55:57 CEST 2012
More information about the Python-ideas mailing list
Wed Oct 17 16:55:57 CEST 2012
- Previous message: [Python-ideas] The async API of the future: yield-from
- Next message: [Python-ideas] The async API of the future: yield-from
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Wed, Oct 17, 2012 at 3:16 AM, Greg Ewing <greg.ewing at canterbury.ac.nz> wrote: > Guido van Rossum wrote: >> >> On Tue, Oct 16, 2012 at 12:20 AM, Greg Ewing >> <greg.ewing at canterbury.ac.nz> wrote: >> >>> it blurs the distinction >>> between invoking a subtask synchronously and waiting for the >>> result of a previously spawned independent task. >> >> >> Are you sure you really want to distinguish between those though? > > > I think I do. Partly because I feel that not doing so would > make code harder to reason about. Async stuff is difficult > enough as it is without hiding the boundaries between one > thread of control and another. > > There are technical reasons as well. If you use 'yield from' > to wait for completion of an independent task, then it would > seem like you should be able to do this: > > t1 = task1() > t2 = task2() > spawn(t1) > spawn(t2) > r1 = yield from t1 > r2 = yield from t2 > > But that can't work -- the object that you wait on has to be > different from the generator instance passed to spawn(). The > reason is that if the task finishes before anyone waits on it, > the return value needs to be stored somewhere. > > Having spawn() return an object that deliberately does *not* > have the interface of a generator, and having to explicitly wait > for it, makes it much less likely that anyone will make that kind > of mistake. If you wrote > > t1 = task1() > t2 = task2() > spawn(t1) > spawn(t2) > r1 = yield from t1.wait() > r2 = yield from t2.wait() > > you would quickly get an exception, because generators don't > have a wait() method. Ack. I get it. It's like the difference between calling a function vs. running it in an OS thread. -- --Guido van Rossum (python.org/~guido)
- Previous message: [Python-ideas] The async API of the future: yield-from
- Next message: [Python-ideas] The async API of the future: yield-from
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-ideas mailing list