On 7/24/2014 1:15 AM, Saimadhav Heblikar wrote:
On 24 July 2014 05:54, Terry Reedy <tjre...@udel.edu> wrote:
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

--
https://mail.python.org/mailman/listinfo/python-list

That clears it up for me. For situations where I dont really know how
long a function is going to take(say waiting for user input or a
network operation), I am better off using callbacks than "yield from
asyncio.sleep()". Is my understanding correct?

The question is not formulated very well. In asyncio parlance, 'using callbacks' contrasts with 'using co-routines'. It is a coding-style contrast. Tkinter only has the callback style.

On the other hand, waiting (via sleep, without blocking other tasks) for a definite time interval contrasts with waiting (without blocking other tasks) until an event happens. This is an operational contrast. Tkinter has both possibilities, using call_after versus event-handler registration. I believe asyncio can do either type of waiting with either coding style.

18.5.3. Tasks and coroutines, seems to be devoid of event wait examples. However, there is a 'yield from' network example in 18.5.5 Streams using socket functions wrapped with coroutines. These should definitely be used instead of sleep. In fact, for cross-platform network code meant to run on *nix and Windows, they are better than the unix oriented select and poll functions.

I believe asyncio does not do key events, even though that is a form of unpredictable input.

--
Terry Jan Reedy

--
https://mail.python.org/mailman/listinfo/python-list

Reply via email to