title: what does `yield from asyncio.sleep(delay)` do?
body: <p>The following example from Python in a Nutshell sets  <code>x</code> to  <code>23</code>  after a delay of a second and a half:</p>
  
  <pre><code>@asyncio.coroutine
  def delayed_result(delay, result):
    yield from asyncio.sleep(delay)
    return result
  
  loop = asyncio.get_event_loop()
  x = loop.run_until_complete(delayed_result(1.5, 23))
  </code></pre>
  
  <p>I feel difficult to understand what <code>yield from asyncio.sleep(delay)</code>    does.</p>
  
  <p>From <a href="https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep" rel="noreferrer">https://docs.python.org/3/library/asyncio-task.html#asyncio.sleep</a></p>
  
  <blockquote>
  <pre><code>Coroutine asyncio.sleep(delay, result=None, *, loop=None)
  </code></pre>
    
    <p>Create a coroutine that completes after a given time (in seconds). If
    result is provided, it is produced to the caller when the coroutine
    completes.</p>
  </blockquote>
  
  <p>So <code>asyncio.sleep(delay)</code> returns a coroutine object.</p>
  
  <p>What does a coroutine object "completes" mean?</p>
  
  <p>What values does <code>yield from asyncio.sleep(delay)</code> provide to the main program?</p>
  
  <p>Thanks.</p>