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)
