流式传输依赖于API调用的烧瓶响应

时间:2017-03-15 12:46:20

标签: python stream response

我有两个应用程序,一个烧瓶API(后端)和一个前端应用程序。最近我不得不实现一个流机制,所以前端可以调用api来检索一些数据(分页)并将其内容流回来。

我按照此处所述的指南介绍了如何在Flask中回送响应。

我在前端的伪代码基本上是这样的:

myReader.SetDoc();

return Response(stream_with_context(generate())) 内,我执行以下操作:

generate()

我发现产生的结果不一致。我的直觉是它与阻止API调用有关。在发送回用户的生成器中是否可以阻止api调用?

1 个答案:

答案 0 :(得分:0)

由于我们正在处理库requests,您应该传入stream=True并在响应中使用该生成器。 flask.Response可以使用字符串迭代。

@app.route("/foo")
def foo():
    _resp = requests.get(url, stream=True)
    _resp.raise_for_status()

    resp = Response(
        response=stream_with_context(_resp.iter_content(chunk_size=1024*10)),
        status=200,
        content_type=_resp.headers["Content-Type"],
        direct_passthrough=False)
    return resp

请注意,Content-Type也是透明代理的。

要回答您的问题,如果您在生成器中使用阻止呼叫并不重要 - 但我不明白您为什么要这样做,给出您的示例。