Hi Roy and Guido,
On 2015-12-15 3:08 PM, Guido van Rossum wrote:
[..]
I don't know how long you have been using async/await, but I wonder if
it's possible that you just haven't gotten used to the typical usage
patterns? In particular, your claim "anything that takes an
`awaitable` has to know that it wasn't already awaited" makes me sound
that you're just using it in an atypical way (perhaps because your
model is based on other languages). In typical asyncio code, one does
not usually take an awaitable, wait for it, and then return it -- one
either awaits it and then extracts the result, or one returns it
without awaiting it.
I agree. Holding a return value just so that coroutine can return it
again seems wrong to me.
However, since coroutines are now a separate type (although they share a
lot of code with generators internally), maybe we can change them to
throw an error when they are awaited on more than one time?
That should be better than letting them return `None`:
coro = coroutine()
await coro
await coro # <- will raise RuntimeError
I'd also add a check that the coroutine isn't being awaited by more than
one coroutine simultaneously (another, completely different issue, more
on which here: https://github.com/python/asyncio/issues/288). This was
fixed in asyncio in debug mode, but ideally, we should fix this in the
interpreter core.
Yury
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe:
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com