[Python-Dev] async/await in Python; v2 (original) (raw)
Greg Ewing greg.ewing at canterbury.ac.nz
Fri Apr 24 10:13:24 CEST 2015
- Previous message (by thread): [Python-Dev] async/await in Python; v2
- Next message (by thread): [Python-Dev] async/await in Python; v2
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Yury Selivanov wrote:
In a PEP 3152 aware version of asyncio, it's just *not possible to write*
cocall gather(coro1(1,2), coro(2,3)) you just have to use your 'costart' built-in: cocall gather(costart(coro1, 1, 2), costart(coro, 2,3)).
Another way to write that would be
cocall gather(Task(coro1, 1, 2), Task(coro, 2, 3))
I think that actually reads quite nicely, and makes it very clear that parallel tasks are being spawned, rather than invoked sequentially. With the current way, that's not clear at all.
It's not quite as convenient, because you don't get currying for free the way you do with generators. But I feel that such implicit currying is detrimental to readability. It looks like you're passing the results returned by coro1 and coro2 to gather, rather than coro1 and coro2 themselves.
Yes, it will require some code to be changed, but if you're turning all your coroutines into cofunctions or async defs, you're changing quite a lot of things already.
PEP 3152 was created in pre-asyncio era, and it shows.
I would say that asyncio was created in a pre-PEP-3152 world. Or at least it was developed without allowing for the possibility of adopting something like PEP 3152 in the future.
Asyncio was based on generators and yield-from because it was the best thing we had at the time. I'll be disappointed if we've raced so far ahead with those ideas that it's now impossible to replace them with anything better.
PEP 3152 is designed to present a simpler model of coroutine programming, by having only one concept, the suspendable function, instead of two -- generator functions on the one hand, and iterators/futures/awaitables/ whatever you want to call them on the other.
PEP 492 doesn't do that. It adds some things and changes some things, but it doesn't simplify anything.
Your idea of syntaticaly forcing to use 'cocall' with parens is cute,
You say that as though "forcing" the use of parens were a goal in itself. It's not -- it's a consequence of what a cocall is.
-- Greg
- Previous message (by thread): [Python-Dev] async/await in Python; v2
- Next message (by thread): [Python-Dev] async/await in Python; v2
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]