如何在Flask中将块函数与“ start_background_task”一起使用?

时间:2019-04-16 03:33:15

标签: python flask

我正在使用Flask设置新服务器。 它使用flask_socketio和zmq将图像从服务器推送到Web。 我想将zmq.recv()用作块函数。 但是,它将阻塞烧瓶。来自网络的所有消息将被阻止。 我如何在不使用socketio.sleep()的情况下在烧瓶中使用块函数

我尝试将zmq.NOBLOCK设置为zmq.recv()。然后添加socketio.sleep(0.001)。它有效,但是非常难看。

这是我的代码。

ctx = zmq.Context()
sock = ctx.socket(zmq.ROUTER)
sock.bind("tcp://*:9988")


def recvThread():   
    while True:     
            img = sock.recv()   
                socketio.emit("frame", img)


if __name__ == '__main__':
    init_zmq()
    with thread_lock:
        if thread is None:
            socketio.start_background_task(target=recvThread)
    socketio.run(app, host='0.0.0.0', port=5000)

在这种情况下可以使用任何标志吗?

1 个答案:

答案 0 :(得分:0)

我通过用eventlet.green.zmq替换zmq解决了这个问题。 Ref