Мы отправили огромный набор результатов (который содержит более миллиона строк) из нашей базы данных клиенту, используя службу REST.Это приводит к тому, что весь результирующий набор загружается в память, он упаковывает все и отправляет его клиенту.Клиент должен загрузить этот огромный объем данных, прежде чем можно будет выполнить какую-либо обработку.Я пытаюсь выяснить способ потоковой передачи данных между сервером и клиентом.
У нас уже есть служба REST, поэтому я пытаюсь отправить генератор Python со стороны сервера (базы данных) клиенту, а клиенту просто приходится иметь дело с текущим фрагментом данных, и когдаэто делается с текущим чанком, который он может просто вызвать next ().
Я не уверен, что это работает как задумано. Кто-нибудь из вас знает, генерирует ли генератор на стороне сервера все данные, а затем отправляет их?Или это действительно работает?
Я также думаю об использовании Python-сокетов, если служба REST не работает, но я открыт для предложений.Если кто-то имел дело с чем-то подобным раньше, что вы делали?
Кстати, для этого мне нужно использовать 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)
Я получаю данные, и все работает хорошо, но я не уверен, действительно ли они передаются в потоковом режиме или просто отправляют всю информацию.