我有一段现成的代码,可以将数据序列化到类似文件对象的数据结构中:
def some_serialization_function(file):
file.write(...)
在Flask中,我希望能够直接将序列化数据发送到客户端,而不是先将其缓存到内存中。
我查看了werkzeug的ResponseStreamMixin,但我认为它无法在没有缓存的情况下工作:
class StreamResponse(flask.Response, werkzeug.wrappers.ResponseStreamMixin):
pass
@app.route("/data")
def get_data():
r = StreamResponse()
some_serialization_function(r.stream) # everything is buffered into memory
return r # buffered data is sent after return
我发现所有关于流数据的示例都是基于生成器的,这些生成器在相反的方向上工作(即数据是从生成器中“拉出来”的,而不是通过写入调用“推送”数据),所以我想知道,在 Flask 中是否有一种直接“写入”客户端的方法?
编辑-为了更清楚:我正在寻找一种方式来提供由“some_serialization_function(...)”生成的数据(我无法轻松更改),而不必将该函数写入所有数据到缓冲区/文件中的内存/IO开销。
(我怀疑最终会使用临时文件,因为与实际通过网络发送数据的开销相比,IO开销并不重要。此外,我的主要关注点是内存开销)。