No.

The reason is that "yield <coroutine>" is intentionally an error, because
it is likely a misspelling for "yield from <coroutine>" -- which means
something completely different from what you are proposing.

On Wed, Nov 12, 2014 at 8:32 PM, Paul Sokolovsky <[email protected]> wrote:

> Hello,
>
> On Thu, 13 Nov 2014 01:38:53 +0100
> Victor Stinner <[email protected]> wrote:
>
> > 2014-11-13 0:18 GMT+01:00 Paul Sokolovsky <[email protected]>:
> > > (...) do you think that it might be possible to go step
> > > further and allow scheduling a new coroutine by just yielding a
> > > generator instance? In other words:
> >
> > (I don't see how it is related to create_task. create_task is nothing
> > new, it's just an helper to not have to pass the loop as a parameter.)
>
> Why, directly related. The talk is about replacing
> "loop.create_task(coro)" with "yield coro". "yield from" is not related
> in any way. In the case of "yield coro", the loop targeted is implicitly
> the current running loop, just the same as "yield from asyncio.sleep()",
> etc. Of course, yield can be used only in coroutines, so doesn't
> replace .create_task() completely, which still may be needed in
> "bootstrap" code.
>
>
> Here're are examples:
>
> Before:
>
> ==========
> try:
>     import uasyncio.core as asyncio
> except:
>     import asyncio
>
> def do_little():
>     for i in range(3):
>         print(i)
>         yield
>
> def main():
>     for i in range(5):
>         loop.create_task(do_little())
>         yield
>
> import logging
> logging.basicConfig(level=logging.INFO)
> loop = asyncio.get_event_loop()
> loop.create_task(main())
> loop.run_forever()
> ==========
>
> after:
>
> ==========
> try:
>     import uasyncio.core as asyncio
> except:
>     import asyncio
>
> def do_little():
>     for i in range(3):
>         print(i)
>         yield
>
> def main():
>     for i in range(5):
>         yield do_little()
>
> import logging
> logging.basicConfig(level=logging.INFO)
> loop = asyncio.get_event_loop()
> loop.create_task(main())
> loop.run_forever()
> ==========
>
>
> Excuse the boilerplate code, tested to run on MicroPython too. The diff
> is:
>
> -        loop.create_task(do_little())
> -        yield
> +        yield do_little()
>
>
> --
> Best regards,
>  Paul                          mailto:[email protected]
>



-- 
--Guido van Rossum (python.org/~guido)

Reply via email to