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返回未来,并且不等待下载完成。使用此代码,我们实际上几乎同时发送每个请求。这可能是为什么下载失败的一些瓷砖。
如何处理较小批量或连续获取?
答案 0 :(得分:0)
最简单的解决方案是不要将max_clients
设置得那么高。默认值为10;将其设置为2000是过度的,在大多数情况下是不合适的。任何超出max_client
限制的请求都将排队,直到另一个请求完成。