Я пытаюсь добиться потоковой передачи в 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()