从 Flask 启用流式传输

Flask 具有该功能,允许你使用生成器从视图中流式传输数据。

让我们改变 app.py 文件

  • 加上 from flask import Response
  • 添加 from datetime import datetime
  • 加上 from time import sleep
  • 创建一个新视图:
@app.route("/time/")
def time():
    def streamer():
        while True:
            yield "<p>{}</p>".format(datetime.now())
            sleep(1)

    return Response(streamer())

现在在 localhost/time/打开浏览器。该站点将永远加载,因为 nginx 等待响应完成。在这种情况下,响应将永远不会完成,因为它将永远发送当前日期和时间。

为了防止 nginx 等待,我们需要在配置中添加一个新行。

编辑/etc/nginx/sites-available/flaskconfig

server {
    listen 80;
    server_name localhost;

    location / {
        include uwsgi_params;
        uwsgi_pass unix:///tmp/flask.sock;
        uwsgi_buffering off;  # <-- this line is new
    }
}

uwsgi_buffering off; 行告诉 nginx 不要等到响应完成。

重新启动 nginx:sudo service nginx restart 并再次查看 localhost/time/

现在你将看到每一秒都会弹出一个新行。