龙卷风 AsyncHTTPClient() 块

Tornado AsyncHTTPClient() chunks

我目前正在使用以下代码获取 URL 的 body:

   httpClient=AsyncHTTPClient()  

    try:
       response=yield httpClient.fetch(url)

       # do something with response.body


    except (HTTPError, IOError, ValueError) as e:
       pass 

但是获取整个 body 似乎不是执行此操作的有效方法,因为我正在 URL 中搜索一段特定信息。是否有可能而不是获取 URL 的整个 body 以分块获取它并在我找到我正在寻找的内容后停止,或者在需要时继续获取?

我也这样做了 URLs。我看到你可以使用以下内容:

httpclient.HTTPRequest(url='[some_big_request]', streaming_callback=self.on_chunk)

但是,一旦我进入回调,我如何从该函数中获取我需要的信息?我需要将该值与我从其他 URLs...

获得的值结合起来

看看 streaming_callbacktornado.httpclient.HTTPRequest

If set, streaming_callback will be run with each chunk of data as it is received, and HTTPResponse.body and HTTPResponse.buffer will be empty in the final response.

因为回调可以是一个闭包,它可以访问外部数据。在调用 tornado.httpclient.AsyncHTTPClient.fetch 的块中定义此函数。您可以访问所有必要的内容。

streaming_callback 与闭包或部分一起使用:

def f():
    response = yield client.fetch(url, functools.partial(self.on_fetch, url))

def on_fetch(self, url, chunk):
    # do something with chunk

目前无法从 streaming_callback 中取消提取;下载将继续 运行 完成。