title: How can I add a connection timeout with asyncio?
body: <p>I want to connect to a list of a lot of different sites very fast. 
  Im using asyncio to do this in an asynchronous manner and now want to
  add a timeout for when connections should be ignored if they take too long to respond. </p>
  
  <p>How do I implement this?</p>
  
  <pre><code>import ssl
  import asyncio
  from contextlib import suppress
  from concurrent.futures import ThreadPoolExecutor
  import time
  
  
  @asyncio.coroutine
  def run():
      while True:
          host = yield from q.get()
          if not host:
              break
  
          with suppress(ssl.CertificateError):
              reader, writer = yield from asyncio.open_connection(host[1], 443, ssl=True) #timout option?
              reader.close()
              writer.close()
  
  
  @asyncio.coroutine
  def load_q():
      # only 3 entries for debugging reasons
      for host in [[1, 'python.org'], [2, 'qq.com'], [3, 'google.com']]:
          yield from q.put(host)
      for _ in range(NUM):
          q.put(None)
  
  
  if __name__ == "__main__":
      NUM = 1000
      q = asyncio.Queue()
  
      loop = asyncio.get_event_loop()
      loop.set_default_executor(ThreadPoolExecutor(NUM))
  
      start = time.time()
      coros = [asyncio.async(run()) for i in range(NUM)]
      loop.run_until_complete(load_q())
      loop.run_until_complete(asyncio.wait(coros))
      end = time.time()
      print(end-start)
  </code></pre>
  
  <p>(On a sidenote: Has somebody an idea how to optimize this?)</p>