服务器端:
from flask import Flask, request, Response, stream_with_context
import time
app = Flask(__name__)
# Define a route /stream that handles POST requests
@app.route('/stream', methods=['POST']) # GET also been tried, no difference
def stream():
@stream_with_context
def generate():
print('1')
yield "Hello\n"
time.sleep(1) # Simulate some delay
print('2')
yield "World\n"
time.sleep(1)
print('3')
yield "This is\n"
time.sleep(1)
print('4')
yield "Streaming data\n"
time.sleep(1)
print('5')
return Response(generate(), content_type='text/event-stream')
if __name__ == '__main__':
app.run(debug=True)
客户端:
import requests
import sseclient
reqUrl = 'https://api.my-domain-name.com/stream'
headers={'Accept': 'text/event-stream'}
# response = requests.get(url=reqUrl, headers=headers, stream=True)
response = requests.post(url=reqUrl, headers=headers, stream=True)
if response.status_code == 200:
for chunk in response.iter_content(chunk_size=3):
if chunk:
print(chunk)
else:
print('fail:', response.status_code)
# sse tried, no difference
# client = sseclient.SSEClient(response)
# for event in client.events():
# print(event.data)
When client connected, there was 1 2 3 4 5 printed one by one at the server side.
But client printed nothing, until server finished, client printed all data.
Help!
我已经try 了上面的代码,并try 了GET/POST,无论是否使用SSE. 当我try GET方法时,我也try 了curl-v命令,同样的结果,数据在大约5秒后聚集在一起,而不是一个接一个. 我预计流数据,即每个yield 率数据都可以单独及时处理,而不是一起处理.