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/

Reply via email to