It's because you're awaiting on your tasks in your 2nd example, causing you to make your main() call wait until each task is complete before moving on (notice how you don't await in your calls to loop.create_task() in your 1st example).
I think you want is something like: import asyncio async def say(what, when): await asyncio.sleep(when) print(what) async def main(loop): task1 = loop.create_task(say('first hello (sleep 2 seconds)', 2)) task2 = loop.create_task(say('second hello (sleep one second)', 1)) await asyncio.gather(task1, task2, loop=loop) print('close') loop = asyncio.get_event_loop() loop.run_until_complete(main(loop)) loop.close() On Mon, 27 Aug 2018 at 02:47 saurabh singh <saurabh3...@gmail.com> wrote: > my question is 1st one is concurrent but 2nd one is not, how and please > correct me, what i miss and what should i know more > thank you > > import asyncio > > # 1st code > async def say(what, when): > await asyncio.sleep(when) > print(what) > > loop = asyncio.get_event_loop() > > loop.create_task(say('first hello', 2)) > loop.create_task(say('second hello', 1)) > > loop.run_forever() > loop.close() > > ''' > result > >>> second hello > >>> first hello > ''' > > # 2nd code > async def say(what, when): > await asyncio.sleep(when) > print(what) > > async def main(loop): > yield from loop.create_task(say('first hello', 2)) > yield from loop.create_task(say('second hello', 1)) > print('close') > > loop = asyncio.get_event_loop() > loop.run_until_complete(main(loop)) > loop.close() > > ''' > result > >>> first hello > >>> second hello > ''' > > _______________________________________________ > Async-sig mailing list > Async-sig@python.org > https://mail.python.org/mailman/listinfo/async-sig > Code of Conduct: https://www.python.org/psf/codeofconduct/ >
_______________________________________________ Async-sig mailing list Async-sig@python.org https://mail.python.org/mailman/listinfo/async-sig Code of Conduct: https://www.python.org/psf/codeofconduct/