使用子流程在Flask中传输数据

时间:2018-06-11 05:03:30

标签: python multithreading flask subprocess

所以,基本上我正在制作一个网络流媒体服务,我使用带烧瓶的opencv在浏览器中传输网络摄像头视频:

def gen(camera):
    frame  = camera.get_frame()
    yield (b'--frame\r\n'
           b'Content-Type: image/jpeg\r\n\r\n' + frame.tobytes() + b'\r\n')

@app.route('/video_feed')
def video_feed():
    return Response(gen(Camera()),
                mimetype='multipart/x-mixed-replace; boundary=frame')

这很好用。现在,当用户查看网络摄像头时,我会生成一组数据(比如说面部点)。我想使用子进程将此数据流式传输到浏览器。这是我到目前为止所写的:

服务器端

@app.route('/yield')
def conso():
    def inner():
        proc = subprocess.Popen(                 # where L is the stream of data
        L,            
        shell=True,
        stdout=subprocess.PIPE
    )

    for line in iter(proc.stdout.readline,''):
        time.sleep(1)                         
        yield ( line.rstrip() + b'\r\n')

return Response(inner(), mimetype='text/event-stream') 

客户端

<script>
if (!!window.EventSource) {
  var source = new EventSource('/yield');
  source.onmessage = function(e) {
  $("#data").text(e.data);
  }
 }
</script>
<div id="data">nothing received yet</div>

但是无法传输任何数据。它没有给出任何错误。有人可以帮我确定问题所在。

0 个答案:

没有答案