Могу ли я отправить генератор через службу REST в Python? - PullRequest
0 голосов
/ 19 июня 2019

Мы отправили огромный набор результатов (который содержит более миллиона строк) из нашей базы данных клиенту, используя службу 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)

Я получаю данные, и все работает хорошо, но я не уверен, действительно ли они передаются в потоковом режиме или просто отправляют всю информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...