首页 > 解决方案 > 如何在 Flask 中使用带有“start_background_task”的块功能?

问题描述

我正在使用 Flask 设置一个新服务器。它使用 flask_socketio 和 zmq 将图像从服务器推送到网络。我想使用 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)

是否有任何标志可以用于这种情况?

标签: pythonflask

解决方案


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


推荐阅读