【发布时间】:2019-01-03 18:10:22
【问题描述】:
用例 - 一些用户数据正在后端(烧瓶)中加载,进度通过加载栏显示在前端。后端有一个生成器,它加载数据并保持 yielding 进度(这个生成器使用 stream_with_context 作为响应返回)。前端使用 javascript EventSource 对象查询烧瓶视图。
代码:
@app.route("/progress", methods=['GET'])
def progress():
gen = get_user_data()
return Response(stream_with_context(gen), mimetype= 'text/event-stream')
def get_user_data():
n = 100 (number of data points to be loaded)
for i in range(1,n+1):
#load data
yield "data:" + str((float(i)/(n))*100) + "\n\n"
yield "data:" + "close" + "\n\n"
这在我的本地环境中运行良好。但是,当我将它部署在 google app engine 柔性环境上时,加载栏直接从 0 变为 100。也就是说,每次生成器产生时,前端都不会更新,而是得到一次所有的 EventSource 消息(当生成器完成执行时)。
我的 app.yaml:
runtime: python
env: flex
entrypoint: gunicorn --timeout 240 -b :$PORT app:app
runtime_config:
python_version: 2
manual_scaling:
instances: 1
resources:
cpu: 1
memory_gb: 0.5
disk_size_gb: 10
知道如何让它在谷歌应用引擎上运行吗?
【问题讨论】:
标签: python google-app-engine flask generator gunicorn