如何在flask响应中返回分块二进制数据?

2024-04-24 12:33:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个处理get请求的flask端点,我有兴趣在响应中返回一个对象列表(序列化),但以“分块”的方式。我的意思是,当我向那个端点发出get请求时,我希望能够迭代响应(就像我正在获取二进制数据的列表一样),并将每个“块”反序列化为一个对象。在

我能够达到一个与我的需要相似的结果,但是用的是弦。例如:

服务器端:

from flask import stream_with_context, request, Response

from flask import Flask

app = Flask(__name__)


@app.route('/stream')
def streamed_get():
    @stream_with_context
    def generate():
        yield 'Hello \n'
        yield "there\n"
        yield '!\n'

    return Response(generate())

客户端:

^{pr2}$

将打印:

Hello 
there
!

但这似乎很明显,因为我使用的是response.iter_lines()。在

为了进一步试验,我尝试向服务器发送一个post请求,如下所示:

客户端:

def gen():
    yield 'hi\n'
    yield 'there'


requests.post("http://127.0.0.1:5000/stream_post", data=gen())

服务器端:

@app.route('/stream_post',  methods=['POST'])
def stream_post():
    count = 0
    for i in request.stream:
        print(i, count)
        count += 1
    print(request.data)
    return Response()

在服务器控制台上打印:

('hi\n', 0)
('there', 1)

我不知道如何做一个类似的事情,但是对于一个序列化的对象。我觉得我的知识有一个根本的差距,因为我似乎在寻找一种返回区块编码响应的方法?或者至少是某种响应,它的大小会随之变化,所以我可以在客户端迭代它,如果这有意义的话。在


Tags: 对象app客户端flaskstreamget序列化response