title: Python Tornado rate limiting AsyncHttpClient fetch
body: <p>Currently using an API that rate limits me to 3000 requests per 10 seconds. I have 10,000 urls that are fetched using Tornado due to it's asynchronous IO nature. </p>
  
  <p>How do I go about implementing a rate limit to reflect the API limit?</p>
  
  <pre><code>from tornado import ioloop, httpclient
  
  i = 0
  
  def handle_request(response):
      print(response.code)
      global i
      i -= 1
      if i == 0:
          ioloop.IOLoop.instance().stop()
  
  http_client = httpclient.AsyncHTTPClient()
  for url in open('urls.txt'):
      i += 1
      http_client.fetch(url.strip(), handle_request, method='HEAD')
  ioloop.IOLoop.instance().start()
  </code></pre>