You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Python Flask每秒向API发随机数据仅返回最后数组的问题

问题原因

你的Flask路由函数会完整执行完整个循环后才返回最终结果,客户端只能等到所有循环结束才能拿到数据,所以看不到每秒更新的效果。要实现实时推送数据,需要用Flask的流式响应(Streaming Responses),让服务器逐步向客户端发送数据,而不是一次性返回。

解决方案

使用生成器函数配合Flask的Response对象,设置合适的响应头,让客户端保持连接并持续接收每秒更新的数据。

修改后的代码

import time
import random
from flask import Flask, Response, jsonify

app = Flask(__name__)

@app.route('/')
def index():
    def generate_data():
        mylist = []
        for i in range(0, 61):
            x = random.randint(1, 100)
            mylist.append(x)

            if len(mylist) == 11:
                mylist.pop(0)
            
            # 将当前列表转为JSON字符串,按SSE格式输出
            yield f"data: {jsonify(mylist).data.decode('utf-8')}\n\n"
            time.sleep(1)
    
    # 指定响应类型为事件流,维持长连接
    return Response(generate_data(), content_type='text/event-stream')

if __name__ == "__main__":
    app.run(debug=True)

关键说明

  • 生成器函数:generate_data作为生成器,每次yield都会向客户端发送当前的列表数据,无需等待循环结束。
  • 响应头设置:content_type='text/event-stream'告诉客户端这是流式事件流,会保持连接持续接收数据。
  • 数据格式:用data: 前缀包裹JSON字符串,是Server-Sent Events(SSE)的标准格式,客户端可以轻松解析。

客户端实时展示示例(JavaScript)

如果要在网页上实时显示数据,可以用这段代码:

<!DOCTYPE html>
<html>
<body>
  <div id="data-display"></div>
  <script>
    const source = new EventSource('/');
    source.onmessage = function(event) {
      const latestData = JSON.parse(event.data);
      document.getElementById('data-display').textContent = JSON.stringify(latestData);
    };
  </script>
</body>
</html>

内容的提问来源于stack exchange,提问作者MJay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 01:50:37