[Async-sig] concurrency mistake

Brett Cannon brett at python.org
Mon Aug 27 12:14:54 EDT 2018


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 <saurabh3460 at 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 at python.org
> https://mail.python.org/mailman/listinfo/async-sig
> Code of Conduct: https://www.python.org/psf/codeofconduct/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/async-sig/attachments/20180827/b99c13bc/attachment.html>


More information about the Async-sig mailing list