Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #75123 > unrolled thread
| Started by | Saimadhav Heblikar <saimadhavheblikar@gmail.com> |
|---|---|
| First post | 2014-07-24 10:45 +0530 |
| Last post | 2014-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.
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
| From | Saimadhav Heblikar <saimadhavheblikar@gmail.com> |
|---|---|
| Date | 2014-07-24 10:45 +0530 |
| Subject | Re: 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]
| From | Marko Rauhamaa <marko@pacujo.net> |
|---|---|
| Date | 2014-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