title: While loop blocks asyncio tasks
body: <p>I've been using asyncio for a bit but I'm still fairly unfamiliar with it. My current issue is that while trying to wait for a response from a function with asyncio, the waiting (while loop) blocks the function from happening. Here is the code that sums up the problem:</p>
  
  <pre><code>import asyncio
  
  response = 0
  
  async def handle(x):
      await asyncio.sleep(0.1)
      return x
  
  async def run():
      global response
      for number in range(1, 21):
          response = await handle(number)
          print(response)
          if response == 10:
              await wait_for_next(response)
  
  async def wait_for_next(x):
      while response == x:
          print('waiting',response,x)
          await asyncio.sleep(0.5)
      print('done')
  
  tasks = [run()]
  loop = asyncio.get_event_loop()
  loop.run_until_complete(asyncio.wait(tasks))
  </code></pre>
  
  <p>wait_for_next is supposed to wait for the next response, but the while loop blocks the run() function. How could I stop this happening? Should I be using loop.run_in_executor, and if so, how?</p>
  
  <p>(There were a couple of other examples of this I could find, but they were very specific and I didn't understand if our problems/solutions would be the same.)</p>