从 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/
。
现在你将看到每一秒都会弹出一个新行。