我可以通过Python中的REST服务发送生成器吗?

时间:2019-06-19 15:56:22

标签: python rest python-requests generator

我们一直在使用REST服务从数据库向客户端发送巨大的结果集(超过一百万行)。这导致整个结果集被加载到内存中,将整个结果打包并发送给客户端。客户必须先下载大量数据,然后才能进行任何处理。我试图找出一种在服务器和客户端之间流传输数据的方法。

我们已经有了REST服务,所以我试图通过Python生成器从服务器端(数据库)发送到客户端,客户端只需要处理当前的数据块以及完成的时间使用当前块,它可以只调用next()。

我不确定这是否可以按预期工作,您是否知道服务器端的生成器是否生成了整个数据,然后将其发送过来?还是真的有效?

如果REST服务不起作用,我还考虑使用Python套接字,但是我愿意接受建议。如果以前有人处理过这种事情,那么您做了什么?

我必须为此使用Python。

我尝试使用生成器,并且获取了所有数据,但是我不确定它是否实际上是分块发送的,或者是否是在服务器端整体生成并发送的,这违背了目的

这只是伪代码来显示我在做什么

#server
@app.route(/stream_data)
def stream_data():

    def gen()
        while data:
            yield data[:chunk_size]
        return
    return requests.response(gen())

#client
def main():
    url = 'blabla@rest.service.com'
    with requests.get(url, stream=True) as r:
        for x in r.iter_content():
             print(x)

我正在获取数据并且一切正常,但是我不确定它是真正流传输还是只是将整个内容发送过来。

0 个答案:

没有答案