Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #75123 > unrolled thread

Re: Question about asyncio doc example

Started bySaimadhav Heblikar <saimadhavheblikar@gmail.com>
First post2014-07-24 10:45 +0530
Last post2014-07-24 08:54 +0300
Articles 2 — 2 participants

Back to article view | Back to comp.lang.python

This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by below is the oldest one visible, not the original post.


Contents

  Re: Question about asyncio doc example Saimadhav Heblikar <saimadhavheblikar@gmail.com> - 2014-07-24 10:45 +0530
    Re: Question about asyncio doc example Marko Rauhamaa <marko@pacujo.net> - 2014-07-24 08:54 +0300

#75123 — Re: Question about asyncio doc example

FromSaimadhav Heblikar <saimadhavheblikar@gmail.com>
Date2014-07-24 10:45 +0530
SubjectRe: Question about asyncio doc example
Message-ID<mailman.12265.1406179417.18130.python-list@python.org>
On 24 July 2014 05:54, Terry Reedy <tjreedy@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?



-- 
Regards
Saimadhav Heblikar

[toc] | [next] | [standalone]


#75126

FromMarko Rauhamaa <marko@pacujo.net>
Date2014-07-24 08:54 +0300
Message-ID<87d2cvti80.fsf@elektro.pacujo.net>
In reply to#75123
Saimadhav Heblikar <saimadhavheblikar@gmail.com>:

> 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?

If you choose the coroutine style of programming, you wouldn't normally
use callbacks. Instead, you would "yield from" any blocking event. There
are coroutine equivalents for locking, network I/O, multiplexing etc.

The callback style encodes the state in a variable. The coroutine style
(which closely resembles multithreading), encodes the state in the code
itself. Both styles can easily become really messy (because reality is
surprisingly messy).


Marko

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web