【问题标题】:How to I read from a Jupyter iopub socket?如何从 Jupyter iopub 套接字读取数据?
【发布时间】:2018-12-18 09:17:18
【问题描述】:

我正在尝试了解有关 Jupyter 有线协议的更多信息。我想收集在 IOPub 套接字上发送的消息示例。

设置:

我在一个终端中启动 Jupyter 控制台,然后查找连接文件。就我而言,内容如下:

{
    "shell_port": 62690,
    "iopub_port": 62691,
    "stdin_port": 62692,
    "control_port": 62693,
    "hb_port": 62694,
    "ip": "127.0.0.1",
    "key": "9c6bbbfb-6ad699d44a15189c4f3d3371",
    "transport": "tcp",
    "signature_scheme": "hmac-sha256",
    "kernel_name": ""
}

我创建一个简单的python脚本如下:

import zmq

iopub_port = "62691"
ip = "127.0.0.1"
transport = "tcp"

context = zmq.Context()
socket = context.socket(zmq.SUB)
socket.connect(f"{transport}://{ip}:{iopub_port}")

while True:
    string = socket.recv()
    print(string)

我打开第二个终端并按如下方式执行脚本(它按预期阻塞):

python3 script.py

然后我切换回第一个终端(Jupyter 控制台正在运行)并开始执行代码。

问题:第二个终端上没有任何内容。

预期:一些 Jupyter IO 消息,或者至少是某种错误。

呃,救命?我的代码是否正常,这可能是我的配置问题?还是我的代码不知何故死了?

【问题讨论】:

    标签: zeromq jupyter


    【解决方案1】:

    来自 Jupyter 客户端存储库的所有者之一:

    ZMQ 订阅者套接字在接收之前需要一个订阅集 任何消息。订阅是有效消息的前缀,而您 可以将其设置为空字节字符串以订阅所有消息。

    例如就我而言,我需要添加

    socket.setsockopt(zmq.SUBSCRIBE, b'')
    

    在开始 while 循环之前。

    【讨论】:

      【解决方案2】:

      您知道是否可以从 IOPub 捕获 Jupyter 笔记本中的进程是否完成?

      我在看这里 (http://jupyterlab.github.io/jupyterlab/services/modules/kernelmessage.html) 但不是很清楚。

      【讨论】:

        猜你喜欢
        • 2014-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-20
        • 1970-01-01
        • 1970-01-01
        • 2012-06-26
        相关资源
        最近更新 更多