Неполучение ответов до тех пор, пока запрос не завершит выполнение l oop in python потокового запроса - PullRequest
1 голос
/ 17 апреля 2020

Я пытаюсь добиться потоковой передачи в python. У меня есть требование вернуть огромный результат от курсора до остальных API. Я использую flask stream_with_context при возврате ответов. но когда я пытаюсь сделать запрос, используя флаг stream = True, мой запрос ждет ответов, пока курсор не выполнит все данные.

, ожидая получить от 1 до 10 элементов один за другим, когда получит выход в ответ. но мой запросчик из test.py ждет, пока все elemnst не будут обработаны из service_runner.py

, вот пример кода. service_runner.py

from flask import Flask, stream_with_context, Response
import time, json
app = Flask(__name__)

@app.route('/')
def hello_world():
    return 'Hello, World!'

@app.route('/StreamData')
def StreamData():
    def stream1():
        for i in range(10):
            print(i)
            time.sleep(1) # this is to see requestor recives stream or not.
            yield json.dumps(i)
    return Response(stream_with_context(stream1()))

test.py

import requests, asyncio, aiohttp
URL='http://127.0.0.1:5000/StreamData'
def TestStream():
    req1 = requests.get(URL, stream=True)
    print(req1)
    for r in req1.iter_lines(chunk_size=1):
        print(r)

async def TestWithAsync():
    async with aiohttp.ClientSession() as session:
        async with session.get(URL) as resp:
            print(await resp.content.read())

def main():
    event_loop = asyncio.get_event_loop()
    event_loop.run_until_complete(TestWithAsync())
    event_loop.close()

if __name__=='__main__':
    TestStream()
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...