On Thu, Feb 18, 2021 at 8:23 PM Luciano Ramalho <luci...@ramalho.org> wrote:
> Thanks for your reply, Guido. > > On Fri, Feb 19, 2021 at 12:07 AM Guido van Rossum <gu...@python.org> > wrote: > > Reading the doc section you link to, it's pretty clear that > `@asyncio.coroutine` will be removed. > > The *Note* right at the top of [1] says "Support for generator-based > coroutines is deprecated and is scheduled for removal in Python 3.10." > > [1] > https://docs.python.org/3/library/asyncio-task.html#generator-based-coroutines > > But PEP 492 [2] says: > > "Since, internally, coroutines are a special kind of generators, every > await is suspended by a yield somewhere down the chain of await calls" > > [2] https://www.python.org/dev/peps/pep-0492/#await-expression > > If that part of PEP 492 is no longer accurate, then I have a couple of > questions: > > 1) What Python construct is to be used at the end of a chain of await > calls, if not of a generator-based coroutine decorated with > `@types.coroutine` and using a `yield` expression in its body? > > 2) Given that the sole purpose of `@types.coroutine` is to decorate > generator-based coroutines to become awaitable, will that decorator > also be removed, along with "support for generator-based coroutines"? > > Best, > > Luciano > It looks like types.coroutine will remain (it does not contain code to warn about deprecation like asyncio.coroutine does), but I don't think it is required to end a chain of coroutines -- it may have been an oversight that we did not start deprecating it. (But in any case it won't be supported by asyncio.) At the end of the chain you can call the __await__() method which gives an iterator, and then you call next() or send() on that iterator. Each next()/send() call then represents an await step, and send() in general is used to provide an awaited result. Eventually this will raise StopIteration with a value indicating the ultimate result (the return value of the top-level async def). The code used to "drive" a chain of await calls is called a trampoline. But writing a trampoline is not easy, and the only example I know of is asyncio's Task class, in particular its __step() method, which of course is beyond complicated because it has to handle so many special cases. -- --Guido van Rossum (python.org/~guido) *Pronouns: he/him **(why is my pronoun here?)* <http://feministing.com/2015/02/03/how-using-they-as-a-singular-pronoun-can-change-the-world/>
_______________________________________________ Python-Dev mailing list -- python-dev@python.org To unsubscribe send an email to python-dev-le...@python.org https://mail.python.org/mailman3/lists/python-dev.python.org/ Message archived at https://mail.python.org/archives/list/python-dev@python.org/message/CEQQLON7A5D64V7VAPH7OCTULG2HZPHQ/ Code of Conduct: http://python.org/psf/codeofconduct/