首页 > 解决方案 > 使用 Flask 在 WebSocket 连接上读取多处理管道

问题描述

我有一个开发 API,flask它使用multiprocessing. 这些进程是无限期地继续运行的监听器,并在发生有趣的事情时做出反应。他们还监视管道消息,以防 API 需要他们做某事。

我还有一个前端,它使用 WebSockets 显示有关 API 的实时信息。现在,我想让我的前端显示有关侦听器的实时信息,但我对如何实现它有点困惑。

pipe.recv()我正在考虑在请求与前端的 WebSocket 连接时使用 API 端管道继续读取。如果听众发现一些有趣的东西,他们会通过管道将此信息发送到我的 API,然后 API 会发出一个 WebSocket 事件以将此信息发送到前端。

global listeners

listeners = {
    "LISTENER_ID": {
        "pipe": PIPE_REFERENCE
    }
}


@socketio.on('connect', '/servingListenersInformation')
def update_info():
    global listeners

    listener_id = request.cookies.get("listener_id")

    while True:
        info = listeners[listener_id]["pipe"].recv()

        socketio.emit("updateInfo", info, "/servindListenersInformation")
        time.sleep(500)

我主要关心的是 Flask 的性能问题。我知道在生产环境中,Flask 会被一个可以同时处理多个请求/连接的服务器包装。但是一个打开的 WebSocket 连接总是从管道中读取是否太多了?

标签: pythonflaskwebsocketpython-multiprocessing

解决方案


推荐阅读