Flask生成器不在Azure Web应用程序中流式传输

时间:2016-02-07 19:41:13

标签: python azure flask streaming

我尝试将Flask网络应用中的JSON流发送到浏览器。 这是服务器端生成器的简化版本:

@app.route('/stream')
def stream():
  def generate():
    for i in range(1000):
      time.sleep(0.05)
      yield '{"key": %d}' % i
  return Response(generate(), mimetype="application/json")

在浏览器中,我使用oboe.js:

来使用流
stream = oboe('/stream')
  .on('node', {
    'key': function (scheme) {
       console.log(scheme);
    }
  })

在本地,在开发服务器中这非常好用,数据作为连续流传输。但是当将其作为Azure Web服务运行时,GET请求需要很长时间,然后立即获取所有数据。在生成器完成之前,服务器似乎不会传输任何数据。

这种行为是否可归因于在Azure上使用的Flask背后的WSGI / Web服务器?除了更改平台之外还有其他解决方法吗?哪种WSGI服务器支持这种流式传输?

感谢您的帮助,

鲍里斯

1 个答案:

答案 0 :(得分:0)

根据我的经验,它似乎是由IIS作为Azure WebApp上Flask的WSGI / Web服务器引起的,但我不确定。

对于哪种WSGI服务器支持这种流式传输,您可以参考线程HTTP Streaming with Apache mod_wsgi

我建议您尝试在Azure VM上测试其他WSGI + Flask组合服务器,例如Ubuntu VM服务器。

希望它有所帮助。最诚挚的问候。