如何批量处理tornado http_client.fetch

时间:2015-09-03 09:18:19

标签: python asynchronous tornado asynchttpclient

def downloadTile(root, message):
  data = message
  tornado.httpclient.AsyncHTTPClient.configure(None, max_clients=2000)
  http_client = AsyncHTTPClient()
  http_client.fetch(data.url,  functools.partial(handle_request, root, message))


def handle_request(root, message, response):
  '''callback needed when a response arrive'''
  data = message
  dirpath = os.path.join(root, str(data.z), str(data.x))
  if not os.path.exists(dirpath):
  os.makedirs(dirpath)
  # filepath
  filepath = os.path.join(dirpath, '%s.png' % data.y)
    with open(filepath, "w") as f:
      f.write(str(response.body))
      log.debug("Downloading Progressing")

Fetch返回未来,并且不等待下载完成。使用此代码,我们实际上几乎同时发送每个请求。这可能是为什么下载失败的一些瓷砖。

如何处理较小批量或连续获取?

1 个答案:

答案 0 :(得分:0)

最简单的解决方案是不要将max_clients设置得那么高。默认值为10;将其设置为2000是过度的,在大多数情况下是不合适的。任何超出max_client限制的请求都将排队,直到另一个请求完成。