How do you unwrap the result of the coroutine wrapped in the task though? 

On Wednesday, August 5, 2015 at 4:02:24 AM UTC-6, Guido van Rossum wrote:
>
> To start a coroutine from a callback, you wrap the coroutine in a Task. 
> That's all. E.g. (untested)
>
> from asyncio import coroutine, get_event_loop
>
> @coroutine
> def coro():
>     ...
>     yield from something()
>     ...
>
> # callback
> def heartbeat():
>     get_event_loop().create_task(coro())
>     get_event_loop().call_later(n, heartbeat)
>
> heartbeat()  # Get it all started
>
> On Wed, Aug 5, 2015 at 5:46 AM, Wellington Cordeiro <[email protected] 
> <javascript:>> wrote:
>
>> I'm trying to add a system where a "heartbeat" message is sent to a 
>> server every n seconds by my client, but I'm having trouble with the 
>> loop.call_later or call_at methods. They use callbacks but I'm trying to 
>> run a coroutine at the set interval without blocking. The conditions I'm 
>> trying to work within are
>>
>> 1. countdown from n, when we reach zero send the heartbeat
>> 2. If a message is received from the server before we hit zero, reset the 
>> timer
>> 3. If we send a different message before we hit zero, reset the timer
>>
>> I'm just not sure how to implement something like this with asyncio, I 
>> tried using the threading.Timer class but since that creates another thread 
>> my client called the loop.stop() method before the interval and closed its 
>> connection early.
>>
>
>
>
> -- 
> --Guido van Rossum (python.org/~guido)
>

Reply via email to