Flask потоковая передача не возвращает обратный ответ до завершения - PullRequest
2 голосов
/ 29 апреля 2020

Итак, я пытаюсь передать потоковые данные, возвращенные из базы данных sql. Чанки кажутся потоковыми, однако, когда я достигаю конечной точки, он показывает ответ в самом конце, когда запрос завершен, вместо того, чтобы показывать поточный поток данных по чанкам. Я знаю, что уже есть вопросы по этому поводу, но добавление mimetype, похоже, не работает для меня. У меня есть следующий код:

Любая помощь высоко ценится!

       def generate_chunks():
            result = _get_query_service(repo_url, True).stream_query(qry)
            chunk_counter = 0

            while True:
                chunk = result.fetchmany(5)
                chunk_counter += 1
                if not chunk:
                    break
                for value in chunk:
                    yield str(chunk)

        return Response(stream_with_context(generate_chunks()), content_type='application/json', status=200)

1 Ответ

1 голос
/ 30 апреля 2020

На самом деле это была маленькая вещь. Приведенный выше код работает.

Но такие инструменты, как Postman и Insomnia, не поддерживают потоковую передачу данных.

Если вы хотите, чтобы ваши данные транслировались в действии, используйте запросы CURL или python.

Для CURL вам нужно добавить опцию --no-buffer для просмотра потоковых данных.

curl --no-buffer -v http://localhost:8082/healthy

Для Python запросов необходимо добавить stream=True. Пример:

r = requests.post('http://localhost:8082/stream_query', json=dc, stream=True)

r.encoding = 'utf-8'

for line in r.iter_content(chunk_size=10): # prints the streamed data in chunks
    print(line)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...