Question about asyncio doc example

Terry Reedy tjreedy at udel.edu
Wed Jul 23 20:24:24 EDT 2014


On 7/23/2014 6:43 AM, Saimadhav Heblikar wrote:
> Hi,
>
> The example in question is
> https://docs.python.org/3/library/asyncio-task.html#example-hello-world-coroutine.
> I'd like to learn the purpose of the statement
> "yield from asyncio.sleep(2)" in that example.
>
> In particular, I'd like to know if asyncio.sleep() is used as a
> substitute for slow/time consuming operation, i.e. in real code,
> whether there will be a real time consuming statement in place of
> asyncio.sleep().

The context is
     while True:
         print('Hello')
         yield from asyncio.sleep(3)

sleep is both itself, to shown to schedule something at intervals in a 
non-blocking fashion, as well as a placefiller.  The blocking equivalent 
would use 'time' instead of 'yield from asyncio'. The following shows 
the non-blocking feature a bit better.

import asyncio

@asyncio.coroutine
def hello():
     while True:
         print('Hello')
         yield from asyncio.sleep(3)

@asyncio.coroutine
def goodbye():
     while True:
         print('Goodbye')
         yield from asyncio.sleep(5.01)

@asyncio.coroutine
def world():
     while True:
         print('World')
         yield from asyncio.sleep(2.02)

loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.wait([hello(), goodbye(), world()]))

Getting the same time behavior in a while...sleep loop requires 
reproducing some of the calculation and queue manipulation included in 
the event loop.

-- 
Terry Jan Reedy




More information about the Python-list mailing list