title: How to not await in a loop with asyncio?
body: <p>Here is a toy example that downloads the home page from several websites using asyncio and aiohttp:</p>
  
  <pre><code>import asyncio
  import aiohttp
  
  sites = [
      "http://google.com",
      "http://reddit.com",
      "http://wikipedia.com",
      "http://afpy.org",
      "http://httpbin.org",
      "http://stackoverflow.com",
      "http://reddit.com"
  ]
  
  
  async def main(sites):
      for site in sites:
          download(site)
  
  
  async def download(site):
      response = await client.get(site)
      content = await response.read()
      print(site, len(content))
  
  
  loop = asyncio.get_event_loop()
  client = aiohttp.ClientSession(loop=loop)
  content = loop.run_until_complete(main(sites))
  client.close()
  </code></pre>
  
  <p>If I run it, I get:</p>
  
  <pre><code>RuntimeWarning: coroutine 'download' was never awaited
  </code></pre>
  
  <p>But I don't want to await it.</p>
  
  <p>In twisted I can do:</p>
  
  <pre><code>for site in sites:
      download(site)
  </code></pre>
  
  <p>And If I don't explicitly "yield" or add a callback to the returned Deferred, it just runs without blocking nor complaining. I can't access the result, but in this case I don't need it.</p>
  
  <p>In JS I can do:</p>
  
  <pre><code>site.forEarch(site){
      donwload(site)
  }
  </code></pre>
  
  <p>And again, it doesn't block nor does it requires anything from my part.</p>
  
  <p>I found a way to do:</p>
  
  <pre><code>async def main(sites):
      await asyncio.wait([download(site) for site in sites])
  </code></pre>
  
  <p>But:</p>
  
  <ul>
  <li>this is really not obvious to find it out. I it's hard to remember.</li>
  <li>it's hard to understand what it does. "waits" seems to say "i block", but does not convey clearly it block for the entire list of coroutine to finish.</li>
  <li>you can't pass in a generator, it needs to be a real list, which i feels really unatural in Python.</li>
  <li>what if I have only ONE awaitable ? </li>
  <li>what if I don't want to wait at all on my tasks, and just schedule them for execution then carry on with the rest of my code ?</li>
  <li>it's way more verbose thant twisted and JS solution.</li>
  </ul>
  
  <p>It there a better way ?</p>