【发布时间】:2014-05-06 01:19:44
【问题描述】:
我有将数据序列化为类文件对象的现有代码:
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 开销不会很大。我主要关心的是内存开销)。
【问题讨论】: