我们一直在使用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)
我正在获取数据并且一切正常,但是我不确定它是真正流传输还是只是将整个内容发送过来。