如何从单独的进程控制散景服务器



散景服务器正在运行,生成特定的绘图。另一个进程如何向散景服务器发送消息,使其完全丢弃此图并生成新图?散景服务器需要能够根据来自其他进程的消息生成许多不同样式的绘图之一。它还需要能够接收对图中数据的流更新。它可能不相关,但绘图需要嵌入到 Flask 应用程序的页面中。

编辑:这个问题最初是关于我试图做什么的细节提出的,但由于过于宽泛而收到了负面反馈。我希望我让它更简洁,而不会陷入 XY 问题。目标是让散景服务器显示实时数据图,并根据独立于散景服务器运行其他脚本来使这些图随时间变化。

您可以使用 pyzmq 的 asyncio 接口在散景服务器和其他进程之间进行通信。

http://pyzmq.readthedocs.io/en/latest/api/zmq.asyncio.html

如果您希望应用程序的每个会话都有不同的通信进程:

server_lifecycle.py on_session_created()启动该过程,并启动一个任务以监视散景应用程序代码中传入的 PyzMQ 消息:

import zmq
import zmq.asyncio
ctx = zmq.asyncio.Context.instance()
sock = ctx.socket(zmq.XXXX)
sock.bind(.....)
@without_document_lock
async def message_loop():
    while True:
        message = await sock.recv_pyobj() 
        process_message(message)
curdoc().add_next_tick_callback(message_loop)

其中sock是套接字对象。

下面是一个完整的示例:

https://gist.github.com/ruoyu0088/ea9a199762993b91f7ca13d0dbdbcdaa

最新更新